【问题标题】:Int16 found nillInt16 发现零
【发布时间】:2018-11-12 14:16:07
【问题描述】:

这个 IBAction 会调出一个带有两个文本框的 UIAlertController。一盒姓名,一盒年龄。我正在努力做到这一点,这样用户就不必输入他们的年龄,如果他们不想的话。现在,如果他们没有输入年龄,应用程序会在person.age = Int16(points!)!line 旁边崩溃,说“线程 1:致命错误:在展开可选值时意外发现 nil”。我正在尝试使用 if else 语句停止此操作。我错过了什么?

   @IBAction func addRowBtn(_ sender: Any) {
        let alert = UIAlertController(title: "Add Person", message: nil, preferredStyle: .alert)
        alert.addTextField { (textField) in
            textField.placeholder = "Task"
        }
        alert.addTextField { (textField) in
            textField.placeholder = "Points"
            textField.keyboardType = .numberPad
        }
        let action = UIAlertAction(title: "post", style: .default) { (_) in
            let name = alert.textFields?.first!.text!
            let age = alert.textFields?.last!.text!
            if name != nil && age != nil {
                let person = Person(context: PersistenceServce.context)
                person.name = name
                person.age = Int16(age!)!
                PersistenceServce.saveContext()
                self.people.append(person)
                self.table.reloadData()

            }
             if name != nil && age == nil {
                let person = Person(context: PersistenceServce.context)
                person.name = name
                person.age = 0
                PersistenceServce.saveContext()
                self.people.append(person)
                self.table.reloadData()
            }
        }
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }
}

【问题讨论】:

  • 那...展开的力量很大。您应该阅读 Swift 语言指南,并学习如何正确处理选项。

标签: swift if-statement int uialertcontroller


【解决方案1】:

为了避免展开问题,我建议您这样做:

let action = UIAlertAction(title: "post", style: .default) { (_) in
        if let ageString = alert.textFields?.last?.text,
            let age = Int16(ageString),
            let name = alert.textFields?.first?.text {
            let person = Person(context: PersistenceServce.context)
            person.name = name
            person.age = age
            PersistenceServce.saveContext()
            self.people.append(person)
            self.table.reloadData()
        } else if let name = alert.textFields?.first?.text {
            let person = Person(context: PersistenceServce.context)
            person.name = name
            person.age = 0
            PersistenceServce.saveContext()
            self.people.append(person)
            self.table.reloadData()
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多