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