-1

私はSwiftが初めてで、オプションのバインディングの概念を学ぼうとしています。私は次のコードを思いつきました:

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

Xcode プレイグラウンド出力エラー メッセージ:

value of optional type "int?" not unwrapped, did you mean to use "!" or "?"

ただし、「!」を追加すると、に if let actualNumber = Int(possibleNumber!){

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

Xcode は別のエラー メッセージを表示します。

initialiser for conditional binding must have Optional type, not int

なぜこうなった?

4

2 に答える 2

1

if letコンストラクトでは

if let actualNumber = Int(possibleNumber!){
    print("\(possibleNumber) has an integer value of \(actualNumber)")
}

Intイニシャライザを使用する必要はありません。あなたは単に書く必要があります

if let actualNumber = possibleNumber {
    print("\(possibleNumber) has an integer value of \(actualNumber)")
}

これで Swift は unwrap を試みpossibleNumberます。操作が成功すると、ラップされていない値が内部に配置されactualNumberTHENブロックが実行されます。

于 2016-02-25T10:39:05.253 に答える
1

結果として

let possibleNumber = Int("123")

オプションの Int -Int?

Int次に、別のものを作成しようとしています

Int(possibleNumber)

イニシャライザはオプションではない型を想定しているため、これは機能しません。エラー メッセージは、オプションのバインディングではなく、初期化子に関連しています。

これを試して、同じエラーメッセージを取得してください。

let possibleNumber = Int("123")
let x = Int(possibleNumber)

2番目の例Intでは、ラップされていない暗黙の引数で を初期化すると、Int!オプションではない引数が取得さIntれ、コンパイラはオプションの欠落について不平を言います。

于 2016-02-25T10:42:20.037 に答える