不能对 'ViewController' 类型的非可选值使用可选链接
Cannot use optional chaining on non-optional value of type 'ViewController'
我是 swift 的新手,正在学习有关创建待办事项列表应用程序的教程。一旦我在 self.createItem(name: text
中添加问号,我就会得到一个错误 Cannot use optional chaining on non-optional value of type 'ViewController'
@objc private func didTapAdd() {
let alert = UIAlertController(title: "New Item", message: "Enter new Item", preferredStyle: .alert)
alert.addTextField(configurationHandler: nil)
alert.addAction(UIAlertAction(title: "Submit", style: .cancel, handler: {
_ in
guard let field = alert.textFields?.first, let text = field.text, !text.isEmpty else {
return
}
self?.createItem(name: text)
}))
present(alert, animated: true)
}
问题是您没有将 self 变量声明为弱变量以使其可选。使用下面的 weak self 使 ViewController 的 self 实例成为可选的。然后你就可以使用问号了。
@objc private func didTapAdd() {
let alert = UIAlertController(title: "New Item", message: "Enter new Item", preferredStyle: .alert)
alert.addTextField(configurationHandler: nil)
alert.addAction(UIAlertAction(title: "Submit", style: .cancel, handler: { [weak self] (_) in
guard let field = alert.textFields?.first, let text = field.text, !text.isEmpty else {
return
}
self?.createItem(name: text)
}))
present(alert, animated: true)
}
我是 swift 的新手,正在学习有关创建待办事项列表应用程序的教程。一旦我在 self.createItem(name: text
中添加问号,我就会得到一个错误 Cannot use optional chaining on non-optional value of type 'ViewController'
@objc private func didTapAdd() {
let alert = UIAlertController(title: "New Item", message: "Enter new Item", preferredStyle: .alert)
alert.addTextField(configurationHandler: nil)
alert.addAction(UIAlertAction(title: "Submit", style: .cancel, handler: {
_ in
guard let field = alert.textFields?.first, let text = field.text, !text.isEmpty else {
return
}
self?.createItem(name: text)
}))
present(alert, animated: true)
}
问题是您没有将 self 变量声明为弱变量以使其可选。使用下面的 weak self 使 ViewController 的 self 实例成为可选的。然后你就可以使用问号了。
@objc private func didTapAdd() {
let alert = UIAlertController(title: "New Item", message: "Enter new Item", preferredStyle: .alert)
alert.addTextField(configurationHandler: nil)
alert.addAction(UIAlertAction(title: "Submit", style: .cancel, handler: { [weak self] (_) in
guard let field = alert.textFields?.first, let text = field.text, !text.isEmpty else {
return
}
self?.createItem(name: text)
}))
present(alert, animated: true)
}