特に、非nil値または文字列リテラルを保証する3進数。私のクラスインサイド定数を代入するために3進数を使用するのはなぜですか?
: - "Hello World" の
var title: String?
後で...
let currentTitle = (self.title != nil) ? self.title : "Hello world"
currentTitle
は、それが価値を保証する必要があるにもかかわらず、任意です。どうして?
特に、非nil値または文字列リテラルを保証する3進数。私のクラスインサイド定数を代入するために3進数を使用するのはなぜですか?
: - "Hello World" の
var title: String?
後で...
let currentTitle = (self.title != nil) ? self.title : "Hello world"
currentTitle
は、それが価値を保証する必要があるにもかかわらず、任意です。どうして?
あなたはそれが常に値を持つことになります知っているが、型システムがそれを知りません。イニシャライザの式を型に変換すると、Bool ? String? : String
(Bool ? String? : String?
に変換され、両方の腕が一致するようになります)のように見えます。
これを書くための適切な方法は、nil`がオプションをアンラップしない `と比較すると
let currentTitle = self.title ?? "Hello world"
self.title
はオプションであり、3項演算子の結果の部分式の1つです。 Swiftは、2つの結果の部分式のタイプを調整して、式全体の型を決定しようとします。String?
とString
を指定すると、String?
を選択する必要があり、文字列リテラルをオプションで強制的に強制します。 self.title
をアンラップ力を試してみてください。
let currentTitle = (self.title != nil) ? self.title! : "Hello world"
このような強制アンラッピングを推奨しないでください。常に良い方法があります。 'self.title ?? "Hello world"はここで正しい解決策です。 –
ありがとうございます。あなたは完全に私の質問に答えましたが、ケビンの方法はよりクリーンでより直接的なようです – inorganik
です。あなたはそれを自分で行う必要があります。ここで探しているツールは、nil coalescing演算子です: 'let currentTitle = title ?? "こんにちは世界"。 – Hamish