Swift中类中的可选let和可选var

时间:2016-03-21 05:42:37

标签: ios swift uiviewcontroller

我是Swift的新手,遇到了问题。

当我在课程中使用optional let时,它会给出错误" Class className has no initializers"。

但是当我使用optional var编写相同的代码时,它没有显示任何错误。

例如:

以下代码给出了错误:Class className has no initializers

class className: UIViewController
{
    let nearbyPlaceRadius : Int?    

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
}

以下代码没有给我任何错误。

class className: UIViewController
{
    var nearbyPlaceRadius : Int?    

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
}

2 个答案:

答案 0 :(得分:4)

    let nearbyPlaceRadius : Int?   

实际上你可以在你的代码中使用以上行并且没有错。但是如果你这样做,你必须编写init方法并在该方法中设置它的值。

答案 1 :(得分:1)

问题是let是不可变的。使用let关键字定义变量或对象后,无法更改它,使用var时,您可以随时改变它。

这就是原因,它说class has no initializers

let someThing: Int? //Wrong
let someThing: Int = 100 //Correct 

供参考:What is the difference between `let` and `var` in swift?

  

更新

您可以将let关键字与初始值设定项一起使用。

let name: String?

init (name: String) {
    println("Initializing: \(name)")
    self.name = name
}