为什么 ViewController 类不需要遵守 NSObject 协议,而其他类则需要

Tak*_*sur 1 ios swift

class ColorizerTextFieldDelegate: NSObject, UITextFieldDelegate {
   ... Some protocol to colorize the text
}

class ViewController: UIViewController, UITextFieldDelegate {
   ... In ViewController UITextFieldDelegate is only used for character count.
}
Run Code Online (Sandbox Code Playgroud)

如果我删除 NSObject,我会收到错误,即类型 'ColorizerTextFieldDelegate' 不符合协议 'NSObjectProtocol' 但我认为 ViewController 类没有必要符合 NSObject 协议。

Con*_*nor 5

因为,正如您在文档中的“继承自”下所见UIViewController继承自UIResponder,而继承自NSObject.

澄清协议与类:NSObjectProtocolUITextFieldDelegate都是协议。UITextFieldDelegate继承自-forNSObjectProtocol协议,这意味着为了符合UITextFieldDelegate,您还需要符合NSObjectProtocol。既然UIViewController已经NSObjectProtocol因为上一段就符合了,那么它需要做的就是符合UITextFieldDelegateColorizerTextFieldDelegate另一方面,你的班级不是免费获得的,所以这就是为什么你需要符合NSObjectProtocol.

  • `UIViewController`、`UIResponder`、`UITextField` 和 `NSObject` 都是类。所以他们可以从其他类继承(如果这对你来说是新的,我会在“子类化”上做一些谷歌搜索)。`UITextFieldDelegate` 和 `NSObjectProtocol` 是协议,而不是类。**类需要通过实现协议的要求来符合协议**。`UITextFieldDelegate` 继承自`NSObjectProtocol` 的事实意味着,一个类要_conform_ 到`UITextFieldDelegate`,它也需要符合`NSObjectProtocol`。 (2认同)