基本上我想知道这个
之间的区别protocol ViewDelegate: class {
func someFunc()
}
和这个
protocol ViewDelegate: NSObjectProtocol {
func someFunc()
}
有什么不同吗?
答案 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委托中定义。 因此,由您决定要用哪种方式确认您的代表