首页 > 解决方案 > 即使在同一个视图控制器中,swift也无法在范围内找到文本字段

问题描述

txtField单击按钮后,我需要打印值,txtField在 viewcotroller 上,但 xcode 返回错误cannot find 'txtField' in scope,但它们在同一个视图中

    override func viewDidLoad() {
        super.viewDidLoad()
        let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
        button.backgroundColor = .green
        button.setTitle("Test Button", for: .normal)
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        self.view.addSubview(button)
        var txtField: UITextField = UITextField()
        txtField.frame = CGRect(x: 50, y: 70, width: 200, height: 30)
        txtField.backgroundColor = UIColor.gray
        
        self.view.addSubview(txtField)
    }
    
    @objc func buttonAction(sender: UIButton!) {
        print(txtField.text)
    }

标签: swift

解决方案


实际上,不,它不在范围内。你var txtFieldviewDidLoad函数里面。没有其他函数的代码可以在此函数内部看到,因此该变量不在另一个函数(例如您的buttonAction.

一般来说,范围内的事物只能看到更高范围内的事物的规则。如果var txtField出现两者viewDidLoad之外buttonAction(即实例属性),那么两者中的代码将能够看到它。

这是一个简单的举动:

var txtField: UITextField = UITextField()
override func viewDidLoad() {
    super.viewDidLoad()
    let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
    button.backgroundColor = .green
    button.setTitle("Test Button", for: .normal)
    button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    self.view.addSubview(button)
    txtField.frame = CGRect(x: 50, y: 70, width: 200, height: 30)
    txtField.backgroundColor = UIColor.gray
    
    self.view.addSubview(txtField)
}

@objc func buttonAction(sender: UIButton!) {
    print(txtField.text)
}

推荐阅读