swift – 逻辑运算符的类型是什么?

前端之家收集整理的这篇文章主要介绍了swift – 逻辑运算符的类型是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将它们用作我的Region结构的方法的参数:
  1. private func combineWith(region: RegionProtocol,combine: (Bool,Bool) -> Bool) -> Region {
  2. return Region() {point in
  3. combine(self.contains(point),region.contains(point))
  4. }
  5. }

但显然,(Bool,Bool) – > Bool)不是什么&&或||是.如果您知道,请告诉我您是如何发现的.

如果你在语句中“cmd-click”单词“Swift”
  1. import Swift

在Xcode中搜索||然后你会发现它被声明为

  1. func ||<T : BooleanType>(lhs: T,rhs: @autoclosure () -> Bool) -> Bool

原因是||的“短路”行为operator:如果是第一个@H_404_16@操作数为true,则根本不能评估第二个操作数.

所以你必须将参数声明为

  1. combine: (Bool,@autoclosure () -> Bool) -> Bool

例:

  1. func combineWith(a : Bool,b : Bool,@autoclosure () -> Bool) -> Bool) -> Bool {
  2. return combine(a,b)
  3. }
  4.  
  5. let result = combineWith(false,true,||)
  6. println(result)

注意:我使用Xcode 6.1.1进行了测试. autoclosure的语法@H_404_16@Swift 1.2(Xcode 6.3)中的参数已更改,我还没有@H_404_16@为Swift 1.2翻译上面的代码(另见Rob的评论@H_404_16@下面).

我现在唯一可以提供的东西非常难看@H_404_16@解决方法.你可以包装||进入一个没有的封闭@H_404_16@autoclosure参数:

  1. func combineWith(a : Bool,() -> Bool) -> Bool) -> Bool {
  2. return combine(a,{ b })
  3. }
  4.  
  5. let result = combineWith(false,{ $0 || $1() } )

或者你没有短路行为:

  1. func combineWith(a : Bool,Bool) -> Bool) -> Bool {
  2. return combine(a,{ $0 || $1 } )

猜你在找的Swift相关文章