Swift Optionals - 条件中的变量绑定需要初始化程序

时间:2015-08-20 16:38:53

标签: swift optional

我是Swift的新手并试图找出Optional概念。我在Playground中有一小段代码,它给了我“条件中的变量绑定需要初始化程序”错误。有人可以解释为什么以及如何解决它?

我只想打印“是”或“否”,具体取决于“score1”是否具有值。这是代码:

import Cocoa

class Person {
    var score1: Int? = 9

    func sum() {
        if let score1 {
            print("yes")
        } else {
            print("No")
        }
    }//end sum
 }// end person

 var objperson = person()
 objperson.sum()

3 个答案:

答案 0 :(得分:13)

if let语句采用可选变量。如果是nil,则执行else块或不执行任何操作。如果它有一个值,则将该值作为非可选类型分配给另一个变量。

因此,以下代码将输出score1或" No"的值。如果没有:

if let score1Unwrapped = score1
{
    print(score1Unwrapped)

}

else
{
    print("No")
}

相同的较短版本是:

print(score1 ?? "No")

在您的情况下,如果您实际上没有使用存储在可选变量中的值,您还可以检查该值是否为nil:

if score1 != nil {
...
}

答案 1 :(得分:5)

书写

if let score1 {

没有意义。如果您想查看得分是否有值,请使用

if score1 != nil {

if let score = score1 {

最后一种情况将新的非可选常量score绑定到score1。这使您可以在if语句中使用score

答案 2 :(得分:0)

问题是if let假设您要创建具有某个值的常量score1。如果你只是想检查它是否包含一个值,就像在nil中一样,你应该像下面这样做:

if score1! != nil {
     // println("yes")

所以你的完整代码看起来像这样:

class Person {
    var score1: Int? = 9

    func sum() {
        if score1 != nil {
            println("yes")
        }
        else {
            println("no")
        }
    }
}

var objperson = Person()
objperson.sum()