swift UITextFieldDelegate 扩展
swift UITextFieldDelegate extension
我是 swift 的新手,我无法理解以下情况。我正在尝试使用几个 UITextFieldDelegate 函数扩展 UIViewController class...
class ViewController: UIViewController{
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
在另一个文件中,如果我定义函数时参数解包,函数不会被调用...
extension UIViewController: UITextFieldDelegate{
internal func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("Text Field Should Begin Editing called")
return true
}
但是如果我打开参数,它就可以工作了。
internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool
你能帮我理解为什么吗?
谢谢
swift 4.2
因为 Objective-C 不保证对象非零,Swift 使参数类型中的所有 类 和导入的 return 类型可选 Objective-C API。在使用 Objective-C 对象之前,您应该检查以确保它没有丢失。
如果您使用 _ textField: UITextField
参数可以为空,因此委托不会调用该方法,因为它在方法签名中寻找非空值,即 internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool
在您的扩展文件中,您应该扩展 您的 ViewController class,而不是 UIViewController class .你不需要解开力。所以它应该是这样的:
extension UIViewController: UITextFieldDelegate{
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("Should begin editing!")
}
}
我是 swift 的新手,我无法理解以下情况。我正在尝试使用几个 UITextFieldDelegate 函数扩展 UIViewController class...
class ViewController: UIViewController{
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
在另一个文件中,如果我定义函数时参数解包,函数不会被调用...
extension UIViewController: UITextFieldDelegate{
internal func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("Text Field Should Begin Editing called")
return true
}
但是如果我打开参数,它就可以工作了。
internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool
你能帮我理解为什么吗? 谢谢
swift 4.2
因为 Objective-C 不保证对象非零,Swift 使参数类型中的所有 类 和导入的 return 类型可选 Objective-C API。在使用 Objective-C 对象之前,您应该检查以确保它没有丢失。
如果您使用 _ textField: UITextField
参数可以为空,因此委托不会调用该方法,因为它在方法签名中寻找非空值,即 internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool
在您的扩展文件中,您应该扩展 您的 ViewController class,而不是 UIViewController class .你不需要解开力。所以它应该是这样的:
extension UIViewController: UITextFieldDelegate{
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print("Should begin editing!")
}
}