Swift UITextField的字符计数与NSException一起崩溃
我有一段代码,可以让用户在按下按钮时输入自己的姓名并进入下一个屏幕。如果未输入任何值,程序不应允许用户继续。当未输入任何名称时,程序会进行检测,并且不会移动到下一个屏幕,但会以NSException类型的未捕获异常终止。我希望允许用户继续输入值(名称),直到实际输入名称(即名称值不为空)。我有没有办法去做那件事。While/for循环似乎不起作用Swift UITextField的字符计数与NSException一起崩溃,swift,uitextfield,segue,action,Swift,Uitextfield,Segue,Action,我有一段代码,可以让用户在按下按钮时输入自己的姓名并进入下一个屏幕。如果未输入任何值,程序不应允许用户继续。当未输入任何名称时,程序会进行检测,并且不会移动到下一个屏幕,但会以NSException类型的未捕获异常终止。我希望允许用户继续输入值(名称),直到实际输入名称(即名称值不为空)。我有没有办法去做那件事。While/for循环似乎不起作用 @IBAction func NameEditingDidChange(_ sender: Any) { NextButto
@IBAction func NameEditingDidChange(_ sender: Any) {
NextButton.isEnabled = true
}
// Once button is pressed
@IBAction func NextButtonPressed(_ sender: Any) {
// Gets user's name from textfield
print("12345abcde")
self.name = NameInput.text!
// If textfield is not empty, moves to next storyboard
if name.characters.count != 0 {
print("in ")
performSegue(withIdentifier: "fistBump", sender: nil)
}
else {
// Prints this line and terminates
print("text field is empty")
}
它崩溃是因为当数组为零时,您试图访问
字符的计数。改变
if name.characters.count != 0
到
如果textfield为空,则分配空字符串
self.name = NameInput.text ?? ""
或
不要放代码>至NameInput.text代码>用于强制展开原因,如果文本字段为空则崩溃
用这种方法尝试是否为有效名称
func isValidName(testStr:String) -> Bool {
// print("validate name: \(testStr)")
let nameRegEx = "^[\p{L} \.\-]+$"
let nameTest = NSPredicate(format:"SELF MATCHES %@", nameRegEx)
return nameTest.evaluate(with: testStr)
}
^[\p{L}.]+$
^
断言字符串开头的位置
匹配下面列表中的单个字符[\p{L}\.\-]+
+
量词-
在一次和无限次之间匹配,尽可能多地匹配,根据需要回馈(贪婪)
\p{L}
匹配来自任何语言的任何类型的字母
逐字匹配字符(区分大小写)
\。
与字符匹配。字面意思(区分大小写)
\-
匹配字符-字面上(区分大小写)
$
在字符串末尾或字符串末尾的行终止符(如果有)之前断言位置
在这里测试你的名字这是处理可选变量的问题。
UITextField.text属性是可选的。
我希望name是存储用户输入到NameInput中的you属性。
只需将您的name属性声明为可选。
变量名称:字符串
在点击操作中
@IBAction func NextButtonPressed(_ sender: Any) {
// Gets user's name from textfield
self.name = NameInput?.text?.stringByReplacingOccurrencesOfString(" " , withString: "")
// If textfield is not empty, moves to next storyboard
if self.name?.characters.count > 0 {// Navigate now
}
}
我想需要self.
在self.name.characters.count中。
func isValidName(testStr:String) -> Bool {
// print("validate name: \(testStr)")
let nameRegEx = "^[\p{L} \.\-]+$"
let nameTest = NSPredicate(format:"SELF MATCHES %@", nameRegEx)
return nameTest.evaluate(with: testStr)
}
@IBAction func NextButtonPressed(_ sender: Any) {
// Gets user's name from textfield
self.name = NameInput?.text?.stringByReplacingOccurrencesOfString(" " , withString: "")
// If textfield is not empty, moves to next storyboard
if self.name?.characters.count > 0 {// Navigate now
}
}