计算UITextField的字符与NSException崩溃

时间:2017-05-04 01:27:27

标签: swift uitextfield segue action

我有一段代码,允许用户输入他们的名字,并在按下按钮时前进到下一个屏幕。如果没有输入值,程序不应允许用户继续前进。程序确实检测何时没有输入名称,并且没有移动到下一个屏幕,但是以NSException类型的未捕获异常终止。我想允许用户继续输入值(名称),直到实际输入名称(即名称值不为空)。我有什么办法可以做到这一点。虽然/ for循环看起来不起作用。

@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")
            }

3 个答案:

答案 0 :(得分:0)

崩溃是因为当你的数组为零时,你试图访问count characters数组。变化

if name.characters.count != 0

if !name.isEmpty

答案 1 :(得分:0)

如果textfield为空,则分配空字符串。

self.name = NameInput.text  ?? "" 

if !NameInput.text.isEmpty {

}

如果文本字段为空,则不要将!放入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}匹配任何语言的任何类型的信件   字面匹配字符(区分大小写)
\.匹配角色。字面意思(区分大小写)
\-匹配字符 - 字面意思(区分大小写)

$断言字符串末尾的位置,或者在字符串末尾的行终止符之前(如果有的话)

从此处测试您的姓名 https://regex101.com/#javascript

答案 2 :(得分:0)

处理可选变量时遇到问题。 UITextField .text属性是可选的。 我希望name是你在NameInput中存储用户输入的属性。 只需将您的name属性声明为可选。 var name:String?

点击操作

    @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
        }
    }