Tnę tablicę ciągów i ustawiam to na [String]
zmienną, ale sprawdzanie typów narzeka. Czy to możliwy błąd kompilatora?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Odpowiedzi:
Indeksowanie tablicy z zakresem nie zwraca tablicy, ale wycinek. Możesz jednak stworzyć tablicę z tego wycinka.
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
var someTags = tags[1..<3] var someTagsArray: [String] = someTags
daje to bardziej pomocneerror: 'Slice<String>' is not convertible to '[String]'
Innym sposobem na to, że w jednym miejscu jest połączyć deklaracja zmiennej let someTags: [String]
i map(_:)
, że przekształci ArraySlice<String>
się [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Innym wygodnym sposobem konwersji an ArraySlice
na Array
to jest:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Nie jest to idealne rozwiązanie, ponieważ inny programista (lub Ty), który przyjrzy mu się później, może nie zrozumieć jego celu. Dobra wiadomość jest taka, że jeśli ten programista (może ty) usunie + []
plik, natychmiast napotka błąd kompilatora, który, miejmy nadzieję, wyjaśni jego cel.
Po prostu rzuć plasterek jako tablicę, gdy zostanie utworzony. Zachowywanie Array jako tablicy bez konieczności używania zmiennej pośredniej. Działa to świetnie, gdy używasz typów kodowanych.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
udokumentowane? Również komunikat o błędzie jest niepoprawny, aSlice
na placu zabaw pojawia się jako [Ciąg]. Wydaje się więc, że są dwa błędy kompilatora i brakuje dokumentacji.