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

时间:2015-02-16 12:56:39

标签: xcode macos swift for-loop

以下是代码:

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行给出了错误。

Screenshot for error

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

2 个答案:

答案 0 :(得分:2)

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

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

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

使用不断增加的数字初始化数组的另一种方法是:

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

<强>更新

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

如果您仍想使用内联初始化,但要执行更复杂的代码,还可以通过定义闭包并立即执行它来初始化该属性:

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

答案 1 :(得分:0)

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

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