首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift UITextFieldDelegate扩展

swift UITextFieldDelegate扩展
EN

Stack Overflow用户
提问于 2019-03-10 12:41:51
回答 2查看 687关注 0票数 0

我对斯威夫特相当陌生,我无法理解下面的情况。我试图用几个UIViewController函数扩展UITextFieldDelegate类.

代码语言:javascript
复制
class ViewController: UIViewController{
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self

在另一个文件中,如果我用未包装的参数定义函数,则该函数不会被调用.

代码语言:javascript
复制
extension UIViewController: UITextFieldDelegate{

    internal func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        print("Text Field Should Begin Editing called")
        return true
    }

但是,如果我打开参数,它就能工作。

代码语言:javascript
复制
    internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool 

你能帮我理解一下原因吗?谢谢

swift 4.2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-10 12:54:00

由于object没有保证对象是非零的,Swift在导入的Objective中使所有参数类型的类和返回类型都是可选的。在使用object对象之前,您应该检查以确保它没有丢失。

如果使用_ textField: UITextField,参数可以为空,因此委托不会调用该方法,因为它在方法签名(即internal func textFieldShouldBeginEditing(_ textField: UITextField!) -> Bool )中寻找非空值。

票数 0
EN

Stack Overflow用户

发布于 2019-03-10 13:57:12

在扩展文件中,您应该扩展ViewController类,而不是UIViewController类。你不需要解开警力。所以应该是这样的:

代码语言:javascript
复制
extension UIViewController: UITextFieldDelegate{
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
         print("Should begin editing!")   
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55087780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档