Swift 读取UITextfields的值时出错

Swift 读取UITextfields的值时出错,swift,Swift,从文本字段读取值时遇到问题。每次我在这一行中键入let username=UsernameTextField.text时,我都会收到一条错误信息:“不能在属性初始值设定项中使用实例成员'UsernameTextField';属性初始值设定项在'self'可用之前运行” 以下是完整的代码: import UIKit class SignInViewController: UIViewController,UITextFieldDelegate { @IBOutlet var Userna

从文本字段读取值时遇到问题。每次我在这一行中键入
let username=UsernameTextField.text
时,我都会收到一条错误信息:“不能在属性初始值设定项中使用实例成员'UsernameTextField';属性初始值设定项在'self'可用之前运行”

以下是完整的代码:

import UIKit

class SignInViewController: UIViewController,UITextFieldDelegate {
    @IBOutlet var UsernameTextField: UITextField!
    @IBOutlet var PasswordTextField: UITextField!
    @IBOutlet var LogInButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.isTranslucent = true
        navigationController?.view.backgroundColor = UIColor.clear
        // Remove Autocorrection Type
        UsernameTextField.autocorrectionType = .no
        PasswordTextField.autocorrectionType = .no
        PasswordTextField.textContentType = UITextContentType("")
        //Next button takes user to the next textfield
        UsernameTextField.delegate = self
        PasswordTextField.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        if textField == UsernameTextField{
            PasswordTextField.becomeFirstResponder()

        } else if textField == PasswordTextField {
            self.view.endEditing(true)
        }
        return true
    }

    let username = UsernameTextField.text
}

您是否有一个名为
UsernameTextField
UITextField
子类? 如果是这样,它可能引用的是类而不是实例

我建议保持变量名称的大小写。更容易区分变量和类

如果这是您使用的约定,您也可以尝试使用

let name=self.UsernameTextField.text

编辑:

这条线似乎超出了功能范围。
应该在关闭前移动它
}

您是否有一个名为
UsernameTextField
UITextField
子类? 如果是这样,它可能引用的是类而不是实例

我建议保持变量名称的大小写。更容易区分变量和类

如果这是您使用的约定,您也可以尝试使用

let name=self.UsernameTextField.text

编辑:

这条线似乎超出了功能范围。 应该在行结束之前移动它

let username = UsernameTextField.text
在类定义的范围内,而不是在方法的范围内。因此,这构成了一个属性初始化,该初始化在构建类的实例时运行。您正在尝试使用另一个成员变量(UsernameTextField)初始化成员变量username。当然,这是行不通的,因为在读取任何成员之前,必须完全初始化对象

您的意思是将该行放在textFieldShouldReturn方法的范围内吗?

该行

let username = UsernameTextField.text
在类定义的范围内,而不是在方法的范围内。因此,这构成了一个属性初始化,该初始化在构建类的实例时运行。您正在尝试使用另一个成员变量(UsernameTextField)初始化成员变量username。当然,这是行不通的,因为在读取任何成员之前,必须完全初始化对象


您的意思是将该行放在textFieldShouldReturn方法的范围内吗?

这就是您的意思,设置文本的调用不在函数中

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == UsernameTextField{
        PasswordTextField.becomeFirstResponder()

    } else if textField == PasswordTextField {
        self.view.endEditing(true)
    }
    return true
}

let username = UsernameTextField.text // THIS IS NOT IN A FUNCTION
把它移到这里:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == UsernameTextField{
        PasswordTextField.becomeFirstResponder()
    } else if textField == PasswordTextField {
        self.view.endEditing(true)
    }
    let username = UsernameTextField.text // THIS IS NOW IN A FUNCTION    
    return true
}

这就是您所拥有的,设置文本的调用不在函数中

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == UsernameTextField{
        PasswordTextField.becomeFirstResponder()

    } else if textField == PasswordTextField {
        self.view.endEditing(true)
    }
    return true
}

let username = UsernameTextField.text // THIS IS NOT IN A FUNCTION
把它移到这里:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == UsernameTextField{
        PasswordTextField.becomeFirstResponder()
    } else if textField == PasswordTextField {
        self.view.endEditing(true)
    }
    let username = UsernameTextField.text // THIS IS NOW IN A FUNCTION    
    return true
}

正如错误所暗示的,“UsernameTextField”是一个实例成员,这意味着它在类被实例化之前(与静态成员相反)不会被实例化,这意味着在类被实例化之前编译行时,该成员还不存在。

正如错误所暗示的“UsernameTextField”是一个实例成员,这意味着在类被实例化之前它不会被实例化(与静态成员相反),这意味着在类被实例化之前编译行时,该成员还不存在。

您必须移动常量并将它们放在“return true”下

您必须移动常量,并将它们放在“return true”下。

因为这一行“丢失了”,它“不在”方法中?不在方法中是什么意思?这一行代码在方法的花括号外,但在类的花括号内。它需要在方法(或函数)的内部在类中不是独立的因为那一行“丢失了”,它“不存在”不在方法中?你说不在方法中是什么意思?你有那一行代码在方法外的花括号,但在类内花括号。它需要在方法(或函数)内,而不是在类中独立