Wcześniej przeszedł interesujący błąd, pracując z lekami generycznymi w Swift. Znalazłem rozwiązanie, ale zastanawiam się, czy ktoś może odpowiedzieć, dlaczego kompilator nie łapie czegoś takiego. Zacznę od bloku kodu.Co jest z pustymi tablicami i rodzajami w Swift?
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)
patrz linia 4. Dlaczego do cholery jest true
? Czy czegoś brakuje? Czy kompilator nie powinien być wystarczająco inteligentny, aby stwierdzić, że nie jest to tablica z String
s? To ostatecznie doprowadziło do błędu, w którym wartość została ustawiona niepoprawnie z powodu pustej tablicy uznanej za niewłaściwą.
miarę rozwiązanie, poszedłem coś wzdłuż linii:
if type(of: array).Element.self == Model.self
Jesteś _nie__ typem elementów tablicy; to T. Simpler: 'if T.self == Int .self' – matt
Również nie otrzymuję' Opcjonalnie> 'dla pierwszej linii. –
matt
Generic to czerwony śledzia! '[Int]() to [String]' to 'true'. – matt