-2

次のコードを試してみましたが、エラーが発生しました。

var possibleNumber = "Hello World!"

if let actualNumber: Int = Int(possibleNumber) {
    print("\"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
    print("\"\(possibleNumber)\" could not be converted to an integer")
}

print(actualNumber) // **Here comes the compile time error**

エラー:

use of unresolved identifier 'actualNumber'

オブジェクトactualNumberの背後で何が起こっているのでしょうか? オプションのバインディングの最初の部分で宣言しました:「if let actualNumber: Int .....」では、なぜ「未解決」なのですか? うーん...「未解決」とは正確には何ですか?

nil を印刷するのはどういうわけか間違っていると思いますが、なぜ間違っているのでしょうか? 知らない。誰かがこれをもう少し説明できますか?ところで、actualNumberの中に本当にnilがありますか?もしそうなら、どうすればそれを「見る」ことができますか?

4

3 に答える 3

1

スコープの場合:

if let actualNumber = Int(possibleNumber) {
    // Here the 'actualNumber' can be accessed because is in scope
} else {
    // Here the 'actualNumber' cannot be accessed because is not in scope 
}

ガードスコープ

guard let actualNumber = Int(possibleNumber) else {
    // actualNumber cannot be accessed
    // print(actualNumber)
    return
}

// actualNumber can be accessed
print(actualNumber)

しかし、オプションの値が必要な場合は、次のようにすることができます

let possibleNumber = "Hello World!"
// actualNumber will be optional (and in this case will be 'nil')
let actualNumber = Int(possibleNumber)

print(actualNumber)
于 2016-04-28T10:42:30.747 に答える
1

if ステートメントで変数を条件付きで宣言していて、if ステートメントの外でそれを使用したい。これはうまくいきません。まず第一に、actualNumber のみが初期化され、possibleNumber が nil でない条件付きチェーンを使用します。possibleNumber が nil の場合、actualNumber は存在しません。

第 2 に、if ステートメント内で宣言された定数 (または変数) は、その if ステートメント内でのみスコープを持ちます。つまり、最後のifステートメントで行っているその定数にアクセスしようとすると、コンパイラは定数が存在しない、「宣言されていない変数」であることを通知します。

オプションのチェーンについては、このサイトで Apple が説明しています。

于 2016-04-28T10:44:02.870 に答える