多分私はまだ非常に混乱しています。私は基本的な概念を理解していると思っていましたが、xcode で遊んでいると、本来あるべきだと思っていたものが得られません。次のコードを使用してください。
var title: String? = "hello world"
println("\(title)")
タイトルにアクセスしているのでラップを解除する必要があると思ったので、これはエラーになると思いましたが、問題なくコンパイルできるようです。誰かがこれに光を当てることができますか?
多分私はまだ非常に混乱しています。私は基本的な概念を理解していると思っていましたが、xcode で遊んでいると、本来あるべきだと思っていたものが得られません。次のコードを使用してください。
var title: String? = "hello world"
println("\(title)")
タイトルにアクセスしているのでラップを解除する必要があると思ったので、これはエラーになると思いましたが、問題なくコンパイルできるようです。誰かがこれに光を当てることができますか?
オプションはPrintable
s です。つまり、それらを出力ストリーム (ここではコンソール) に出力できます。Optional("hello world")
コンソールに次のようなものが表示されるはずです。hello world
アップルドキュメントに基づく
オプションの概念は、C または Objective-C には存在しません。Objective-C で最も近いのは、そうでなければオブジェクトを返すメソッドから nil を返す機能です。nil は「有効なオブジェクトがない」ことを意味します。ただし、これはオブジェクトに対してのみ機能し、構造体、基本的な C 型、または列挙値に対しては機能しません。これらの型の場合、Objective-C メソッドは通常、値が存在しないことを示す特別な値 (NSNotFound など) を返します。このアプローチは、メソッドの呼び出し元が、テストする特別な値があることを知っており、それをチェックすることを覚えていることを前提としています。Swift のオプションを使用すると、特別な定数を必要とせずに、任意の型の値がまったく存在しないことを示すことができます。
例
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark