Swift 2逻辑AND(&)运算符

时间:2015-12-07 12:17:44

标签: ios iphone swift swift2

我是编程新手,并试图找到一种更简单的方法:

if state[0] != 0 && state[1] != 0 && state[2] != 0 && state[3] != 0 && state[4] != 0 && state[5] != 0 && state[6] != 0 && state[7] != 0 && state[8] != 0 {
                    gameOverLabel.text = "It's a tie."
                    gameOverLabel.hidden = false
                    active = false
    }

我尝试了下面的代码,但它的反应就像是OR而不是AND。

if state[0&1&2&3&4&5&6&7&8] != 0 {
                        gameOverLabel.text = "It's a tie."
                        gameOverLabel.hidden = false
                        active = false
        }

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

假设您的目的是检查所有数组元素 不同于零,最简单的方法是

if !state.contains(0) { ... }

您的代码

if state[0&1&2&3&4&5&6&7&8] != 0 { ... }

不起作用 按预期,因为这里是按位AND 0&1&2&3&4&5&6&7&8 首先计算(结果为零),因此等于

if state[0] != 0 { ... }

答案 1 :(得分:0)

let state = [0,1,2,0,4,5,6,7]
if state.filter{$0 != 0}.count > 0 {
                    gameOverLabel.text = "It's a tie."
                    gameOverLabel.hidden = false
                    active = false
}

试试这个

答案 2 :(得分:0)

Array索引

的一般情况
  1. 简短版

    let indices = [4,2,9,6,5,3,8,0]
    
    if !indices.contains({ state[$0] == 0 }) {
        // ...
    }
    
  2. 第二个版本只显示Swift的可能性:

    if !indices.lazy.map{ state[$0] }.contains(0) {
        // ...
    }
    

    使用lazy,否则map会将闭包应用于所有索引,而lazy平均只应用一半元素(contains确定数量处决关闭)。

    注意:少量索引可能没有性能提升。第一个版本肯定(有点轻微)更快。

  3. 特定范围的指数

    1. 只需使用上面的方法

      let indices = 5...9
      
    2. 或者直接操作Array ArraySlice的子序列。

      旁注:尽管似乎ArraySlice(返回类型Array[Range<Int>])是值类型,但在内部它是一种引用类型(如Array })只在变异上复制自己。另外ArraySlice只是数组的视图(因为它们都没有被突变)。所以它可能比第一种方法更快。

      if !state[24...42].contains(0) {
          // ...
      }