Membangun proyek di Xcode 11.4 beta 3, saya mendapatkan kesalahan Swift Compiler ini pada enum:
Enum case memiliki satu tuple sebagai nilai terkait, tetapi ada beberapa pola di sini, secara implisit menggandakan pola dan mencoba untuk mencocokkannya sebagai gantinya
Kode sumber:
switch result {
case .error(let err):
//
case .value(let staff, let locations): // <-- error on this line
//
}
Result
adalah enum umum dengan nilai terkait untuk .error
dan .value
. Dalam hal ini, nilai yang terkait adalah tupple.
public enum Result<T> {
case value(T)
case error(Error)
}
Jangan ingat melihat kesalahan ini sebelumnya, dan mencarinya tidak membuahkan hasil. Ada ide?
Result
, saya setuju, itu kode lama yang ada sebelumSwift.Result
. Tapi itu tidak ada hubungannya dengan masalah ini.Jawaban:
Saya menemukan Anda juga dapat membungkam kesalahan ini dengan memperlakukan nilai yang terkait lebih seperti tuple dengan membungkusnya dalam set kurung tambahan:
sumber
let
jika Anda akan mengikat semuanya:case let .value( (staff, locations) ):
dancase .value( let (staff, locations) ):
keduanya kompilasi. Pilih fave Anda!Oke, cari tahu. Sepertinya
enum
dengan nilai terkait, di mana tipe nilai adalah sebuah tupple, tidak bisa lagi dicocokkan pada pernyataan switch seperti itu:Larutan
Nilai dari tupple harus diekstraksi secara manual dalam Xcode 11.4 (Swift 5.2):
sumber
Ini adalah masalah yang diketahui: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_release_notes
Sebagai contoh, meninggalkan tanda kurung ketika menyalakan Opsional dari jenis tuple menyebabkan kesalahan kompiler:
}
Penanganan masalah : Tambahkan kurung tambahan untuk secara eksplisit tuple pola:
}
sumber
Jika boleh, saya ingin menambahkan jawaban untuk
if case
versi itu juga.dan tentu saja mengabaikan kasus:
sumber