嗨,我刚开始学斯威夫特。我只是学习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/

10-09 10:01