Ich schneide ein Array von Zeichenfolgen auf und setze dies auf eine [String]
Variable, aber die Typprüfung beschwert sich. Ist es ein möglicher Compiler-Fehler?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Ich schneide ein Array von Zeichenfolgen auf und setze dies auf eine [String]
Variable, aber die Typprüfung beschwert sich. Ist es ein möglicher Compiler-Fehler?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Antworten:
Das Abonnieren eines Arrays mit einem Bereich gibt kein Array zurück, sondern ein Slice. Sie können jedoch ein Array aus diesem Slice erstellen.
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
es gibt Ihnen die hilfreichereerror: 'Slice<String>' is not convertible to '[String]'
Sie können dies auch tun, um ein neues Array des Slice zu erhalten:
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
Eine andere Möglichkeit, dies an einem Ort zu tun, besteht darin, die Variablendeklaration zu kombinieren let someTags: [String]
und dies zu map(_:)
transformieren ArraySlice<String>
in [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Eine weitere bequeme Möglichkeit, ein ArraySlice
zu konvertieren , Array
ist folgende:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Es ist nicht perfekt, weil ein anderer Entwickler (oder Sie selbst), der es später betrachtet, seinen Zweck möglicherweise nicht versteht. Die gute Nachricht ist, dass wenn dieser Entwickler (vielleicht Sie) das entfernt + []
, sofort ein Compilerfehler auftritt, der hoffentlich seinen Zweck klarstellt.
Wirf das Slice einfach als Array um, wenn es erstellt wird. Behalten Sie Ihr Array als Array bei, ohne eine Zwischenvariable verwenden zu müssen. Dies funktioniert hervorragend, wenn codierbare Typen verwendet werden.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
dokumentiert? Auch die Fehlermeldung ist falsch und wirdSlice
auf dem Spielplatz als [String] angezeigt. Es scheint also zwei Compilerfehler und fehlende Dokumentation zu geben.