一行中连续的声明必须用';'分隔在 for 循环中,即使已经包含在内

Consecutive declarations on a line must be separated by ';' in for loop even though already included

代码如下:

import UIKit

class ViewController: UIViewController, UITableViewDelegate {

    @IBAction func sliderMoved(sender: UISlider) {
        var sliderValue = Int(sender.value)
        println(sliderValue)
    }

    @IBOutlet var sliderValue: UISlider!

    var arr:[Int] = []

    for index in 0...21 {
        arr.append(index)
    }

    println(arr)

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }

    /*
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
        cell.textLabel?.text = sliderValue.value * arr[indexPath.row]
    }
    */
}

它给我第 3 行的错误。

**我不得不删除一些代码,堆栈溢出不喜欢那么多代码。我只删除了 viewDidLoad 和 didReceiveMemoryWarning 代码。

这是一个非常简单的修复方法:您必须在 ++ 运算符和左括号之间添加一个空格:

for var i = 0; i < 21; i++ { 
                          ^

没有它,我认为编译器会尝试将 ++{ 视为运算符。

用递增数字初始化数组的另一种方法是:

var arr: [Int] = (0..<21).map {[=11=]}

更新

代码必须放在方法内部 - 您不能在同一级别的属性中执行代码。我建议使用我的回答中描述的替代方法初始化 属性 内联,这应该有效。

如果你仍然想使用内联初始化,但是你有更复杂的代码要执行,你也可以通过定义一个闭包来初始化属性并立即执行它:

var arr:[Int] = {
    var array = [Int]()
    for index in 0...21 {
        array.append(index)
    }
    return array
}()

我建议对 for 循环使用 swift 语法:

for i in 1..<21 {
 arr.append(i)
}