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]
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)
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.var someTags = tags[1..<3] var someTagsArray: [String] = someTags
es gibt Ihnen die hilfreichereerror: 'Slice<String>' is not convertible to '[String]'
quelle
Sie können dies auch tun, um ein neues Array des Slice zu erhalten:
quelle
Eine andere Möglichkeit, dies an einem Ort zu tun, besteht darin, die Variablendeklaration zu kombinieren
let someTags: [String]
und dies zumap(_:)
transformierenArraySlice<String>
in[String]
:quelle
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.quelle
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.
quelle