swift – 有人可以解释类和NSObjectProtocol之间的区别

基本上我想知道这个之间的区别

protocol ViewDelegate: class { 
  func someFunc()
}

还有这个

protocol ViewDelegate: NSObjectProtocol { 
  func someFunc()
}

有什么不同吗?

最佳答案 只有Object或Instance类型可以符合这两种类型的协议,其中Structure和Enum不能同时符合这两种类型

但主要的区别是:
如果一个声明如下协议意味着它继承NSObjectProtocol

protocol ViewDelegate: NSObjectProtocol { 
    func someFunc()
}

如果符合的类不是NSObject的子类,那么该类需要在其中包含NSObjectProtocol方法实现. (通常,NSObject确实符合NSObjectProtocol)

例如:

class Test1: NSObject, ViewDelegate {
   func someFunc() {
   }
   //no need to have NSObjectProtocol methods here as Test1 is a child class of NSObject
}

class Test2: ViewDelegate {
       func someFunc() {
       }
       //Have to implement NSObjectProtocol methods here
    }

如果一个声明如下,则意味着只有对象类型可以通过实现其方法来符合它.没什么特别的

protocol ViewDelegate: class { 
  func someFunc()
}
点赞