无法转换类型'(_) - >的值()'到预期的参数类型'日期'

时间:2016-11-07 13:59:36

标签: swift swift3

如何将花括号中传递的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"
    }
}

1 个答案:

答案 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

中阅读

希望我能正确理解你。