Penginisialisasi default adalah failable
. Artinya, jika parameter yang diterima tidak cocok dengan kasus enum yang valid, maka parameter tersebut akan mengembalikan nil
.
Sekarang Anda ingin melakukan 2 hal yang tidak kompatibel:
- Anda ingin mendefinisikan ulang penginisialisasi default agar tidak dapat gagal. Sebenarnya Anda ingin nilai enum default dibuat ketika parameter yang diterima tidak valid.
- Di dalam penginisialisasi yang telah didefinisikan ulang, Anda ingin memanggil penginisialisasi yang gagal (yang sudah tidak ada lagi) menggunakan nama yang sama dengan penginisialisasi baru.
Ini tidak mungkin, saya punya 3 kemungkinan solusi sebagai berikut:
1) Membuat init
Anda mendefinisikan penginisialisasi baru yang tidak dapat gagal dengan nilai default, nama parameter yang berbeda, dan di dalamnya Anda memanggil penginisialisasi gagal default.
enum Language: String {
case english = "English", italian = "Italian", french = "French"
init(fromRawValue: String){
self = Language(rawValue: fromRawValue) ?? .english
}
}
2) Mendefinisikan ulang init default
Anda mendefinisikan ulang penginisialisasi default, membuatnya tidak dapat gagal dan Anda menulis logika lengkap di dalamnya.
enum Language: String {
case english = "English", italian = "Italian", french = "French"
init(rawValue: String) {
switch rawValue {
case "Italian": self = .italian
case "French": self = .french
default: self = .english
}
}
}
3) Membuat fungsi statis
enum Language: String {
case english = "English", italian = "Italian", french = "French"
static func build(rawValue: String) -> Language {
return Language(rawValue: rawValue) ?? .english
}
}
Sekarang Anda dapat membuat nilai Language
dengan menulis:
let italian = Language.build(rawValue: "Italian") // Italian
let defaultValue = Language.build(rawValue: "Wrong input") // English
person
Luca Angeletti
schedule
01.02.2016