swift: @objc的使用
2016-04-21 14:34
501 查看
用法
在 Swift 代码中,使用@objc修饰后的类型,可以直接供 Objective-C 调用。可以使用
@objc修饰的类型包括:
未嵌套的类
协议
非泛型枚举(仅限于原始值为整形的类型)
类和协议中的属性和方法
构造器和析构器
下标
我们逐个来看看实际的使用:
类
@objc class MyHelper:NSObject { // class code }
Objective-C 中所有的类都需要继承自
NSObject,Swift 中的类需要供 Objective-C 调用的时候,自然也需要显式继承自
NSObject。当然,你也可以继承所有 Objective-C 中的类,因为他们本身也继承自
NSObject:
@objc class MyViewController : UIViewController { }
另外一个细节是,Swift 中的类名,可以使用中文命名,而 Objective-C 中的却只能使用 ASCII 码,在使用
@objc时,需要指定 Objective-C 中使用的 ASCII 名称。这个知识点请参见喵神的 tips:
@objc(MyClass) class 我的类: NSObject { @objc(greeting:) func 打招呼(名字: String) { print("哈喽,\(名字)") } }
协议
@objc修饰协议与修饰类一样,需要注意的是,如果协议中有
optional修饰的方法,就必须使用
@objc来修饰:
@objc protocol CounterDataSource { optional func incrementForCount(count: Int) -> Int optional var fixedIncrement: Int { get } }
关于可选协议的描述,可以参见官方教程
枚举
Swift 中的枚举类型,功能增强了不少。Objective-C 中还是传统的枚举类型,必须使用整型作为原始值。这样看来,Swift 中的枚举类型如果要被@objc修饰,则需要满足原始值是整型的限制条件。不然就会报编译错误。
关于如何在 Objective-C 中使用 Swift 枚举类型,可以见这个帖子:
// Swift @objc enum Bear: Int { case Black, Grizzly, Polar } // OC Bear type = BearBlack; switch (type) { case BearBlack: case BearGrizzly: case BearPolar: [self runLikeHell]; }
其他
在类和协议中的属性和方法,构造器和析构器,下标中使用@objc修饰的用法与上面的用法一样。这里举一个官网的例子说明:
@objc class ExampleClass: NSObject { var enabled: Bool { @objc(isEnabled) get { // Return the appropriate value } } }
需要注意的是,如果类中方法或者属性被
@objc修饰,那么类就必须被
@objc修饰。
stackoverflow 相关问题整理
Swift 2 Syntax Converter @objc being removed以下代码是错的:
@objc class test { }
使用
@objc修饰的类,必须继承自
NSObject。
Swift class add “@objc” for why
@objc修饰协议的用法已经在前面介绍过了。楼主也从官方文档中看到了相关介绍,他的问题是如何使用
@objc修饰类,正确的用法姿势是神马?
when to use @objc in swift code?
新人问题,什么时候使用
@objc。
@objc protocol crashes the swift compiler
协议中方法可选实现的问题。
Need clarification on “@objc class” in Swift
又一个
@objc修饰类的问题。不同的视角。
@objc error when migrated to Swift 2
Swift 2以后,必须显式声明类是
NSObject的子类,不然使用
@objc修饰Swift类就会报错。苹果官方论坛中有篇帖子也对此进行了解答。
Extend @objc protocol with Comparable in Swift
如何定义一个带有
@objc修饰的协议,遵从
Equatable协议?
相关文章推荐
- swift:Swift 2.0值得注意的新特性
- swift 学习计划(一) Array 数组、字典
- IOS(swift)-scrollView(tableView) ·图片加载逻辑的优化
- swift 自定义UIPopoverBackgroundView
- 认识一下Kotlin语言,Android平台的Swift
- 闲话选择排序算法
- swift 数据存储 · NSUserDefaults存储配置信息
- RxSwift 入坑手册 Part0 - 基础概念
- Swift的Guard语句
- Swift方法参数名称省略
- swift 学习计划(一)Array 数组、Dictionary 字典
- Swift 通过出生日期的字符串计算年龄
- Swift柯里化(Currying)
- 三点...和两点加箭头..<的含义和区别
- Swift之 ? , !, as
- swift 的迭代与递归
- oc swift 交互
- swift笔记(二) —— 运算符
- Swift集成极光推送
- Swift - 修改导航栏的样式(文字颜色,背景颜色,背景图片)