Swift类添加“@objc”为什么

时间:2014-12-19 01:52:56

标签: ios xcode swift

这里是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添加到类之间有什么不同?

2 个答案:

答案 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作为前缀。