嗨,我刚开始学斯威夫特。我只是学习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)?”
最佳答案
此语句使用尾随闭包语法。{
和}
之间的内容实际上是一个传递给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
语句没有直接关系。关于ios - Swift中'_ in print()'的含义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51421490/