如何将花括号中传递的failureReason用于方法启动,然后在方法中设置failureReason?
调用启动方法时出现此错误: 无法转换类型'(_) - >的值()'到期望的参数类型'日期'
firstFalcon.launch() { failureReason in }
func launch(date: Date = Date()) {
self.launchDate = date.description
var failureReason = ""
if (fuelType == FuelType.water) {
failureReason = "too much fuel in fuel tank"
}
}
答案 0 :(得分:1)
您需要将其作为参数添加到launch
方法中。现在,您的launch
方法只需要类型为Date
的日期...,并且您已经给出了默认值,因此您无需传递它。
我不确定我是否正确理解了您的问题,但您在failureReason
方法中定义的launch
似乎只是一个字符串
var failureReason = ""
如果是这种情况,那么您应该只为launch
方法添加另一个参数,如下所示:
func launch(date: Date = Date(), failureReason: String)
然后您可以这样调用它:
launch(failureReason: "boom")
但是,如果您希望传入一个可以在launch
方法中使用的回调函数,可能使用failureReason,那么您可以这样做:
func launch(date: Date = Date(), callback: (String) -> Void)
在此定义一个函数,该函数将日期和callback
函数作为参数。然后该函数将String
作为输入参数。
在你的launch
函数中,你可以做你需要做的事情,一旦完成,你用一个字符串调用callback
函数,所以可能是这样的:
func launch(date: Date = Date(), callback: (String)-> Void) {
self.launchDate = date.description
var failureReason = ""
if (fuelType == FuelType.water) {
failureReason = "too much fuel in fuel tank"
}
callback(failureReason)
}
然后你可以这样称呼:
launch() { failureCode in
print("failed with: \(failureCode)")
}
请注意,当你的闭包/回调是函数中的最后一个参数时,你可以在调用它时在参数列表的“外部”调用它,就像我上面所做的那样。这称为“尾随闭包”,您可以在The Swift Programming Language
中阅读希望我能正确理解你。