逻辑运算符的类型是什么?
What is the type of the logical operators?
我想将它们用作我的 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"上的单词
import Swift
在Xcode中搜索||
然后你会发现它被声明为
func ||<T : BooleanType>(lhs: T, rhs: @autoclosure () -> Bool) -> Bool
原因是 "short-circuiting" 操作符的 ||
行为:如果第一个
操作数为真,则不得对第二个操作数求值。
所以你必须声明参数为
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 测试了这个。自动关闭的语法
Swift 1.2 (Xcode 6.3) 中的参数发生了变化,我还不能
为 Swift 1.2 翻译上面的代码(另见 Rob 的评论
下面)。
我现在唯一能提供的就是丑到极点
解决方法。您可以将 ||
包装到一个没有的闭包中
自动关闭参数:
func combineWith(a : Bool, b : Bool, combine: (Bool, () -> Bool) -> Bool) -> Bool {
return combine(a, { b })
}
let result = combineWith(false, true, { [=14=] || () } )
或者你没有短路行为:
func combineWith(a : Bool, b : Bool, combine: (Bool, Bool) -> Bool) -> Bool {
return combine(a, b)
}
let result = combineWith(false, true, { [=15=] || } )
我想将它们用作我的 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"上的单词
import Swift
在Xcode中搜索||
然后你会发现它被声明为
func ||<T : BooleanType>(lhs: T, rhs: @autoclosure () -> Bool) -> Bool
原因是 "short-circuiting" 操作符的 ||
行为:如果第一个
操作数为真,则不得对第二个操作数求值。
所以你必须声明参数为
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 测试了这个。自动关闭的语法 Swift 1.2 (Xcode 6.3) 中的参数发生了变化,我还不能 为 Swift 1.2 翻译上面的代码(另见 Rob 的评论 下面)。
我现在唯一能提供的就是丑到极点
解决方法。您可以将 ||
包装到一个没有的闭包中
自动关闭参数:
func combineWith(a : Bool, b : Bool, combine: (Bool, () -> Bool) -> Bool) -> Bool {
return combine(a, { b })
}
let result = combineWith(false, true, { [=14=] || () } )
或者你没有短路行为:
func combineWith(a : Bool, b : Bool, combine: (Bool, Bool) -> Bool) -> Bool {
return combine(a, b)
}
let result = combineWith(false, true, { [=15=] || } )