Swift'de jeneriklerle çalışırken, bugün erken saatlerde ilginç bir hatayla karşılaştı. Bir çözüm buldum, ama merak ediyorum, derleyicinin neden böyle bir şey yakalamadığını kimse cevaplayabilir mi? Bir kod bloğuyla başlayayım.Swift'deki boş diziler ve jenerikler hakkında neler var?
func doSomething<T>(with array: [T]) {
type(of: array) // Optional<Array<Int>>
array is [Int] // true
array is [String] // true
}
var arrayOfInts: [Int] = []
doSomething(with: arrayOfInts)
Hat 4'e bakın. Neden heck true
? Bir şey mi eksik? Derleyicinin bunu anlamaya yetecek kadar akıllı olmaması, String
s dizisi değil midir? Bu sonuçta, yanlış türden olduğu varsayılan boş diziden dolayı bir değerin yanlış ayarlandığı bir hataya yol açtı. Aslında jenerik ile ilgisi yoktur
if type(of: array).Element.self == Model.self
Dizinin öğelerinin türünü _know_; T. Simpler: 'T. Kendin == Int.self' – matt
Ayrıca, ilk satır için' İsteğe bağlı> 'seçeneğini alamıyorum. –
matt
Genel bir kırmızı ringa balığı! [Int]() [String] '' true'dur. – matt