错误:Bool不可转换为Void:

时间:2014-08-22 11:38:43

标签: swift closures ios8

我正在从Obj移动我的代码。 C到Swift C并尝试实现Twitter sdk ..

但是,我收到了一个错误...... 任何人都可以告诉我我做错了什么。

enter image description here

请帮助我。

我花了两天时间尝试了一切,但没有为我工作。

3 个答案:

答案 0 :(得分:16)

您的块没有return语句,因此编译器 使用最后一个语句的结果

UIApplication.sharedApplication().openURL(url)

作为返回值,即块签名中声明的Bool而不是Void

要解决该问题,只需添加一个return语句:

{ (url: NSURL, oauthToken: String) -> Void in
    UIApplication.sharedApplication().openURL(url)
    return
}

答案 1 :(得分:0)

问题是openURL返回一个布尔值,并且尝试将其转换为Void,因为闭包被声明为返回Void。只需删除如下:

{ (url: NSURL, token: String)  in
    UIApplication.sharedApplication().openURL(url)
}

如果您不想更改闭包签名,只需将返回值分配给变量:

{ (url: NSURL, token: String) -> Void in
    let ret = UIApplication.sharedApplication().openURL(url)
}

答案 2 :(得分:0)

其他答案中没有说明的是,Swift会隐式地将回复添加到单个语句闭包中。

这就像conditionSet.sort {$0.set < $1.set}这样的陈述可以起作用。

这也可能导致意外错误。为避免错误,使闭包有2个语句。最简单的方法是在接受的答案中所述的原始陈述之后添加一个回报。