この例では、Seasons列挙型で、イニシャライザは強制的に "!" 'self'のイニシャライザの最後に暗黙的にアンラップします。 「!」を削除した場合、エラーが発生します:「オプションのシーズンズの値はアンラップされていません」という意味ですか?「!」または「?」...スウィフトENUMS - なぜ私のenumイニシャライザで暗黙のうちにアンラップすると私に叫ぶのですか?それは私を強制する
最初に私はこれに何かがあると思いましたrawValueメソッドを使用して行うことができます。また、ユーザーが入力した値が実際の値ではない可能性があることをSwiftが十分に知っていれば、自動的にオプションにしました。ただし、私は一定の秋を作り、rawValueメソッドをもう一度使ったことがありますが、今度はエラーなく完全に動作しました。
私の質問は、このケースでは特に何ですか? 、私はSELFに割り当てていないときに、スウィフトは完全にオプションでなければそれは大丈夫ですか?
のおかげで答えて
enum Seasons : String {
case fall
case winter
case spring
case summer
static var possibleCases : [Seasons] = [.fall, .winter, .spring, .summer]
init(_ val: String) {
self = Seasons(rawValue: val)!
}
}
let fall = Seasons(rawValue: "fall")
'fall'の型を見てみましょう。' Seasons? 'の型になります。オプションで '!'を使うことは暗黙のアンラップではなく、* explicit *です。 – Hamish
'init?(rawValue:)'は利用可能なイニシャライザです。あなたは 'Seasons(rawValue:"⛄️ ")'に何を期待しますか? (コンパイラはそれを '.winter'に変換するほどスマートではありません:) –
@MartinR Swift 4のための絵文字自然処理コンパイラが必要です。 – Alexander