87
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)
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.var someTags = tags[1..<3] var someTagsArray: [String] = someTags
daje to bardziej pomocneerror: 'Slice<String>' is not convertible to '[String]'
var tags = ["this", "is", "cool"] var someTags: [String] = Array(tags[1..<3]) println("someTags: \(someTags)") // "someTags: [is, cool]"
źródło
Możesz również to zrobić, aby uzyskać nową tablicę wycinka:
var tags = ["this", "is", "cool"] var someTags = [String]() someTags += tags[1..<3] println(someTags[0]) //prints ["is", "cool"]
źródło
Innym sposobem na to, że w jednym miejscu jest połączyć deklaracja zmiennej
let someTags: [String]
imap(_:)
, że przekształciArraySlice<String>
się[String]
:let tags = ["this", "is", "cool"] let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
źródło
Innym wygodnym sposobem konwersji an
ArraySlice
naArray
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.źródło
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])
źródło