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

时间:2017-04-03 22:21:52

标签: swift

基本上我想知道这个

之间的区别
protocol ViewDelegate: class { 
  func someFunc()
}

和这个

protocol ViewDelegate: NSObjectProtocol { 
  func someFunc()
}

有什么不同吗?

2 个答案:

答案 0 :(得分:2)

只有对象或实例类型可以同时符合两种协议类型,其中结构和枚举不能同时符合两种类型

但是主要区别是: 如果一个人声明了如下协议,则意味着它正在继承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()
}

答案 1 :(得分:-1)

当通过类进行确认时,这意味着我们仅输入对象类型。所以我们可以宣布它为弱或强 但是,当使用NSObjectProtocol进行确认时,我们将其设置为对象类型,并且也可以实现NSObjectProtocol方法。它已经在NSObjectProtocol委托中定义。 因此,由您决定要用哪种方式确认您的代表