2017-01-03 6 views
2

ここでfullLengthを設定する正しい方法は何ですか?スウィフト3でオプションの整数をアンラップする正しい方法

var index = foo.index(foo.startIndex, offsetBy: SOME_NUM) 
let length = Int(foo.substring(to: index)) 

if let fullLength = length? + SOME_NUM { 
    return 
} 

length?はオプションです。私はこれを持っていました:

ですが、lengthがnilの場合は!を使用する危険性はありません。

答えて

2

あなたは私がこれを行うだろう

if let length = length { 
    let fullLength = length + SOME_NUM 
} 
+4

a != nil ? a! : b 

の省略形です。 :-p – ghostatron

+0

ええ、間違いなくかなり頻繁に起こります。私の側でより速いインターネットを持つことはおそらく同様に助けるでしょう:D – Keiwan

1
if let length = length 
{ 
    fullLength = length + SOME_NUM 
} 
1

としてそれを書き換えることができます:

let index = foo.index(foo.startIndex, offsetBy: SOME_NUM) 

guard let length = Int(foo.substring(to: index)) else { 
    //show error 
    //return reasonable value for error 
} 

let fullLength = length + SOME_NUM 

この方法ではlengthはの前提条件として有効な番号(ないゼロ)であるとして問題に近づきます残りのコードの実行。

2

nil-Coalescing演算子を使用することができます。nil-Coalescing演算子の理解に役立つために、例を挙げておきましょう。これも問題を解決します。nil-coalescing演算子 '??'に? bがaを含む場合はオプションのaをラップし、aがnilの場合はbを返す。それは今、人々は、15秒間隔でまったく同じことを記述しないようにSO「そうとそう答えを入力している」必要がありますあなたの質問に

var index = foo.index(foo.startIndex, offsetBy: SOME_NUM) 
    let length = Int(foo.substring(to: index)) 
    let someDefaultValue = 0 

    let fullLength = length ?? someDefaultValue + SOME_NUM 
    // or to be precise , you can also 
    //replace someDefaultValue with 0 in above code 
関連する問題