SWIFT IF ELSE和Modulo

时间:2014-07-18 17:42:46

标签: swift

在Swift中,我需要创建一个简单的for-condition-increment循环,其中3的倍数为3到100。到目前为止,我有:

var multiplesOfThree: [String] = []

for var counter = 0; counter < 30; ++counter {

    multiplesOfThree.append("0")



    if counter == 3 {

        multiplesOfThree.append("3")

    } else if counter == 6 {

        multiplesOfThree.append("6")

    } else if counter == 9 {

        multiplesOfThree.append("9")

    }



    println("Adding \(multiplesOfThree[counter]) to the Array.")

}

我想用以下内容替换所有if和else if语句: if(index%3 == 0)

但我不确定正确的语法是什么?另外,如果我有一个IF语句,我需要一个.append行来添加到数组吗?

1 个答案:

答案 0 :(得分:6)

你正走在正确的轨道上。几点说明:

  1. 使用..<运算符(开放范围运算符),Swift提供了一种更简洁的方法来迭代固定数量的整数。
  2. 您的if语句与模数运算符完全正确
  3. 要从Int创建字符串,您可以在字符串中使用\(expression)。这称为String Interpolation
  4. 以下是工作代码:

    var multiplesOfThree: [String] = []
    
    for test in 0..<100 {
        if (test % 3 == 0) {
            multiplesOfThree.append("\(test)")
        }
    }
    

    但是,没有理由迭代每个数字。您可以继续添加3,直到达到最大值:

    var multiplesOfThree: [String] = []
    var multiple = 0
    while multiple < 100 {
        multiplesOfThree.append("\(multiple)")
        multiple += 3
    }
    

    正如rickster在评论中指出的那样,您也可以使用带有by方法的Strided Range以更简洁的方式执行此操作:

    var multiplesOfThree: [String] = []
    
    for multiple in stride(from: 0, to: 100, by: 3) {
        multiplesOfThree.append("\(multiple)")
    }
    

    更高级,您可以使用map功能在一行中执行此操作。 map方法允许您对数组中的每个元素应用转换:

    let multiplesOfThree = Array(map(stride(from: 0, to: 100, by: 3), { "\($0)" }))
    

    注意:要理解最终的代码,您需要了解closures周围的语法。