这里是a link到Swift教程。
我阅读了协议部分,我知道协议是否标有@objc:
@objc protocol CounterDataSource {
optional func incrementForCount(count: Int) -> Int
optional var fixedIncrement: Int { get }
}
这意味着该协议用于指定可选要求,并且只能由类
采用但教程没有说明为什么班级也需要用@objc标记?
@objc class Counter {
var count = 0
var dataSource: CounterDataSource?
func increment() {
if let amount = dataSource?.incrementForCount?(count) {
count += amount
} else if let amount = dataSource?.fixedIncrement? {
count += amount
}
}
}
如果我从类中删除@objc,编译器也没有显示错误消息
那么将@objc添加到类之间有什么不同?
答案 0 :(得分:5)
弃用
最新的Swift版本不再可能使用@objc
w / o NSObject
,因此不推荐使用此答案。
原始
@objc以类为前缀,允许在ObjC中使用它们。如果你纯粹是在Swift中进行交易,那就没必要了。
此外,如果您的类继承自ObjC类,则前缀是不必要的。
答案 1 :(得分:0)
例如#selector
由Obj-c拥有,
我们很快将在对象的#selector
或.addTarget
中使用.target
。在此,我们应该在@objc
之前添加定位方式。
示例:
@objc func dummy(_ sender: UIButton) {
print("xxx")
}
上述方法将在
之类的UIButton目标中使用dummyButton.addTarget(self, action: #selector(self. dummy(_:)), for: .touchUpInside)
这就是为什么我们在快速使用@objc
作为前缀。