Mutating Operator Error After Changing to Swift 3, Issue Researched, but can't solve 解决办法

Mutating Operator Error After Changing to Swift 3, Issue Researched, but can't solve

我收到 "left side of mutating operator isn't mutable "..<" returns 不可变值" 错误

我阅读了其他 post 关于变异值的内容,但我无法弄清楚这些解决方案是如何应用的。

代码(和注释):

 //populate array of 3 random numbers using correct answer and 2 incorrect choices

 func insertIntoArray3(_ randomNumber: Int) -> Int {
for intJ in 0 ..< 2 += 1{

    if arrayIndex != 3 {
        checkIfExists(randomNumber)
        if ifExists {
            let randomNumber = 1 + random() % 10
            insertIntoArray3(randomNumber)
        } else {
            array3[arrayIndex] = (randomNumber)
            arrayIndex = arrayIndex + 1
        }
    }

}
return randomNumber
}

修改后的代码:

 //populate array of 3 random numbers using correct answer and 2 incorrect choices
func insertIntoArray3(_ randomNumber: Int) -> Int {

    for _ in 0 ..< 2 + 1{

        if arrayIndex != 3 {
            checkIfExists(randomNumber)
            if ifExists {
                let randomNumber = 1 + arc4random() % 10
                insertIntoArray3(Int(randomNumber))
            } else {
                array3[arrayIndex] = (randomNumber)
                arrayIndex = arrayIndex + 1
            }
        }

    }
    return randomNumber
}

谢谢!

我也遇到了同样的错误....

//this function populates an array of the 40 image names

func populateAllImagesArray() {
for  intIA in 1 ..< 11 += 1 {

    tempImageName = ("\(intIA)")
    imageArray.append(tempImageName)

    tempImageName = ("\(intIA)a")
    imageArray.append(tempImageName)

    tempImageName = ("\(intIA)b")
    imageArray.append(tempImageName)

    tempImageName = ("\(intIA)c")
    imageArray.append(tempImageName)
}

//println("imageArray: \(imageArray) ")
//println(imageArray.count)
}

修订:

 //this function populates an array of the 40 image names
func populateAllImagesArray() {

    for  intIA in 1 ..< 11 + 1 {

        tempImageName = ("\(intIA)")
        imageArray.append(tempImageName)

        tempImageName = ("\(intIA)a")
        imageArray.append(tempImageName)

        tempImageName = ("\(intIA)b")
        imageArray.append(tempImageName)

        tempImageName = ("\(intIA)c")
        imageArray.append(tempImageName)
    }

    //println("imageArray: \(imageArray) ")
    //println(imageArray.count)
}

谢谢!

在for循环中添加var,将使左变量可变

for var intIA in 1 ..< 11 {

    intIA = intIA+3
    print("\(intIA)")
}

在您的代码段中,for intIA in 1 ..< 11 += 1 此处 +=1 不正确。

引发错误的行是:

for intJ in 0 ..< 2 += 1{

+=运算符是一个变异运算符,意思是它告诉Swift取左边的任何东西,更改它,在这种情况下,通过添加右边的任何内容。

所以你在这里告诉 Swift 的是,取 0 ..< 2 并将其更改为 (0 ..< 2) + 1。这会引发错误,因为 ..< 运算符 returns 范围是 不可变的 - 一旦创建,就无法更改。

即使您可以改变一个范围,那也可能不是您想做的。从上下文来看,您可能想在右侧加 1,在这种情况下,您只需去掉 =:

for intJ in 0 ..< 2 + 1{

这只是将右侧变为 3,因此循环进入 [0, 1, 2]。

或者您可能只是想让它每次都递增 1,就像标准 C 风格 for 循环中的 i += 1 一样。如果是这种情况,您在这里不需要它。按 1 索引是默认行为,因此您可以省略整个 += 1 位:

for intJ in 0 ..< 2 {

或者如果您需要增加 1 以外的值,您可以使用 Strideable protocol,它看起来像:

for intJ in stride(from: min, to: max, by: increment) {

只需用适当的数字替换 minmaxincrement

这是一个使用常见 setUpTable 函数的 real-world 示例。

Swift 2: C-Style 循环

func setupTable() {
    tableView.setNumberOfRows(nameArray.count, withRowType: "ContactListCell")    
    for i in 0 ..< nameArray.count += 1 {
        let cell = tableView.rowController(at: Int(i)) as? ContactListCell
        let nameText = nameArray[i]
        cell!.nameLabel.setText(nameText)
    }
}

Error: left side of mutating operator isn't mutable "..<" returns immutable value

Swift 3 修复:当我们设置 tables 时,我们正在遍历单元格行,即 ContactListCell,以便我们可以将它们显示在 table。 for i in 0 ..< nameArray.count 已经按 1 索引,因此我们不需要 C-style += 1 语法。

for i in 0 ..< nameArray.count {}