这是Swift教程的a link

我读了协议部分,我知道协议是否用@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添加到类之间有什么不同?

最佳答案

弃用

在最新的Swift版本中,不再可以使用不带@objcNSObject,因此不建议使用此答案。

原版的

@objc是类的前缀,以允许它们在ObjC中使用。如果您仅使用Swift进行交易,则没有必要。

同样,如果您的类继承自ObjC类,则前缀是不必要的。

关于ios - Swift类添加“@objc”的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27558694/

10-15 15:13