我想将它们用作我的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)不是什么&&或||是.如果您知道,请告诉我您是如何发现的.
如果你在语句中“cmd-click”单词“Swift”
原文链接:https://www.f2er.com/swift/319567.htmlimport Swift
在Xcode中搜索||然后你会发现它被声明为
func ||<T : BooleanType>(lhs: T,rhs: @autoclosure () -> Bool) -> Bool
原因是||的“短路”行为operator:如果是第一个
操作数为true,则根本不能评估第二个操作数.
所以你必须将参数声明为
combine: (Bool,@autoclosure () -> Bool) -> Bool
例:
func combineWith(a : Bool,b : 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,() -> Bool) -> Bool) -> Bool { return combine(a,{ b }) } let result = combineWith(false,{ $0 || $1() } )
或者你没有短路行为:
func combineWith(a : Bool,Bool) -> Bool) -> Bool { return combine(a,{ $0 || $1 } )