swift UITextFieldDelegate 扩展
Posted
技术标签:
【中文标题】swift UITextFieldDelegate 扩展【英文标题】:swift UITextFieldDelegate extension 【发布时间】:2019-03-10 12:41:51 【问题描述】:我是 swift 的新手,我无法理解以下情况。我正在尝试使用几个 UITextFieldDelegate 函数来扩展 UIViewController 类...
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
你能帮我理解为什么吗? 谢谢
斯威夫特 4.2
【问题讨论】:
【参考方案1】:因为 Objective-C 不保证一个对象是非 nil 的,所以 Swift 在导入的 Objective-C API 中使参数类型和返回类型中的所有类都是可选的。在使用 Objective-C 对象之前,您应该检查以确保它没有丢失。
如果您使用_ textField: UITextField
,则参数可以为空,因此委托不会调用该方法,因为它在方法签名中寻找非空值,即internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool
【讨论】:
【参考方案2】:在您的扩展文件中,您应该扩展您的 ViewController 类,而不是 UIViewController 类。你不需要解开的力量。所以它应该是这样的:
extension UIViewController: UITextFieldDelegate
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
print("Should begin editing!")
【讨论】:
以上是关于swift UITextFieldDelegate 扩展的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中创建 UITextFieldDelegate 以限制字符数
键入时如何计算直播的UITextField字数(Swift)?