嗨,我刚刚开始学习Swift。我只是学习ios开发的初学者。
func showOkay() {
let title = NSLocalizedString("a title", comment: "")
let message = NSLocalizedString("msg", comment: "")
let cansal = NSLocalizedString("cancel", comment: "")
let ok = NSLocalizedString("ok", comment: "")
let alertController = UIAlertController (title: title, message: message, preferredStyle: .alert)
let cancelAlertAction = UIAlertAction (title : cansal, style : .cancel) {
_ in print("cancel") // i don't understand this line . its just a print or somthing else. why i cant use print here.
}
let okAction = UIAlertAction(title: ok , style : .default) {
_ in print("ok") // i don't understand this line. its just a print or somthing else. why i cant use print here.
}
alertController.addAction(cancelAlertAction)
alertController.addAction(okAction)
present(alertController, animated: true, completion: nil)
}
@IBAction func btnAction(_ sender: Any) {
showOkay()
}
如果我只使用print()
,它们会给我像
无法将类型'()->()'的值转换为预期的参数类型'(((UIAlertAction)-> Void)?'
答案 0 :(得分:2)
此语句使用结尾闭包语法。 {
和}
之间的内容实际上是一个闭包,传递给UIAlertAction
以便在事件发生时稍后调用。调用闭包时,它将传递所创建的UIAlertAction
对象。
let cancelAlertAction = UIAlertAction (title : cansal , style : .cancel) {
_ in print("cancel") \\ i don't understand this line . its just a print or somthing else . why i cant use print here.
}
如果您不打算使用警报措施,则需要_ in
告诉Swift,您将忽略UIAlertAction
,并且对此不进行任何操作。您是说,我知道有一个参数,但我忽略了它。
如果您未指定_ in
,则Swift会将您的闭包类型推断为() -> ()
类型,这意味着它什么也不做也不产生任何东西。这与您期望提供的闭包类型(UIAlertAction) -> Void
不匹配(采用UIAlertAction
并且不返回任何内容)。
通常这样写:
let cancelAlertAction = UIAlertAction (title : cansal , style : .cancel) { _ in
print("cancel")
}
这样可以更清楚地了解_ in
是闭包参数语法,并且与print
语句不直接相关。