2016-04-07 20 views
-3

我々は、例えば、使用して、オプションとして変数を定義します。プログラム全体私たちが使用して、変数名の値を取得し、その後「?」を避ける方法はありますか?スウィフトで何度も何度もアンラップしてください。

var name : String? 

と、例えば「?」「?」:

print (name?) 

はとにかくあり私たちは「?」を取り除くことができます。オプションの変数をラップ解除するたびに

+0

[参照](http://stackoverflow.com/a/36360605/2976878)を参照してください。オプションのバインディングが必要なような音がします。 – Hamish

+0

はい、オプションをあまり使用しないでください。できるだけ早くアンラップし、後で非オプションを使用してください。 – Sulthan

+1

この変数が初期化されたときには、このオプションが悪いオプションではない、 'var name:String!'を示唆する削除された答えがありました。もしinitのプロセスの一部であればそれを使うべきですが、いつ初期化するのかわからない場合は、 '?'をつけて適切にラップしてください。 – Fonix

答えて

2

これを避けるには、conditional bindingを使用する必要があります。例えば

var name : String? 
name = "Hello world" 

if let unwrappedName = name as? String 
{ 
    // Now unwrappedName isn't optional 
} 

基本的に、unwrappedNameはオプションではない文字列AKAあろう。

しかし、あなたは、私が暗黙のうちに開封された使用をお勧めしたいnilをnameはなることはありませんことを確かに知っていれば、それは本当にすべて、あなたが達成しようとしているかによって異なります。

var name : String! 

しかし、暗黙的に開封された使用は、名前ができたことを示唆しています条件付きバインディングをもう一度チェックする必要があります。つまり、変数が決してゼロにならないことがどれほど確実であるかによって異なります。

+2

値が決してゼロにならないことを確かめることはできません。あなたまたは同僚が1か月にコードを変更した場合はどうなりますか?一般的なルール:ユーザーが暗黙的にアンラップしたオプションを決して使用しない。 – dasdom

+1

「暗黙的にアンラップされたオプションを使用しない」のようなステートメントを投げることはできません。理由のために存在します。あなたの声明を参考にしてバックアップしてください。 どうやら、私はあなたに同意しません。なぜなら、それはすべてのアプリケーション/アルゴリズムに依存していて、あなたの同僚がコードを変更して突然アプリケーションがクラッシュすると、暗黙のアンラップされたオプションではなく、 – OhadM

+2

変数が*決して*できないことが分かっているなら、確かに、* begin *にはオプションではないことをお勧めします。値がインスタンス状態に依存する場合は、遅延変数を使用するか、プレースホルダ値を与えます。暗黙的にアンラップされたオプションが実際に必要とされるケースは非常に少数です。 – Hamish

1

オプションで、if letguard letを使用してアンラップする必要があります。

+0

その後、unwrapするたびにletとguardを使用する必要があります。 「?」よりもコストがかかりますアンラップする。 –

+0

'? 'を書くのはコストがかかりますか?プログラム内で変数を15回取得する必要がある場合は – dasdom

+0

となり、毎回ラップを解除する必要があります。私たちは一度は包み込むことができず、何度も何度も包む必要はありませんか? –

1

使用を避けるために暗黙的にアンラップされたオプションを使用しますか?毎回しかし、あなたがすることなく、someString

someString = "this is the string" 

とアクセスsomeStringの値を取得するときに、あなたの変数が

let someString:String!; 

それを使用して一度に値を持たなければならないことを確認してください「?」 Optionalsの処理方法の完全なガイドについては、

+0

宣言時に変数の値がわからないときは、その使用方法がいっぱいではない –

関連する問題