我想将它们用作 Region 结构的方法的参数:
private func combineWith(region: RegionProtocol, combine: (Bool, Bool) -> Bool) -> Region {
return Region() {point in
combine(self.contains(point), region.contains(point))
}
}
但显然,(Bool, Bool) -> Bool)
不是什么&&或||是。如果您知道,请告诉我您是如何找到的。
答案 0 :(得分:2)
如果你" cmd-click"在#34;斯威夫特"在声明中
import Swift
在Xcode中搜索||
,然后您会发现它被声明为
func ||<T : BooleanType>(lhs: T, rhs: @autoclosure () -> Bool) -> Bool
原因是||
运算符的&#34;短路&#34; 行为:如果是第一个
操作数为true,则根本不能评估第二个操作数。
所以你必须将参数声明为
combine: (Bool, @autoclosure () -> Bool) -> Bool
示例:
func combineWith(a : Bool, b : Bool, combine: (Bool, @autoclosure () -> Bool) -> Bool) -> Bool {
return combine(a, b)
}
let result = combineWith(false, true, ||)
println(result)
注意: 我使用Xcode 6.1.1对此进行了测试。 autoclosure的语法 参数在Swift 1.2(Xcode 6.3)中发生了变化,但我还没有 翻译Swift 1.2的上述代码(另请参阅Rob的评论 下文)。
我现在唯一可以提供的东西非常难看
解决方法。您可以将||
包装到没有的闭包中
autoclosure参数:
func combineWith(a : Bool, b : Bool, combine: (Bool, () -> Bool) -> Bool) -> Bool {
return combine(a, { b })
}
let result = combineWith(false, true, { $0 || $1() } )
或者你没有短路行为:
func combineWith(a : Bool, b : Bool, combine: (Bool, Bool) -> Bool) -> Bool {
return combine(a, b)
}
let result = combineWith(false, true, { $0 || $1 } )