"Leere Sammlung wörtliche erfordert eine explizite type" - Fehler auf Swift3
Habe ich eine variable in meiner Klasse:
var list = []
und ich benutze es auf eine Funktion von meiner Klasse:
func chargeData (data: NSArray){
list = data
}
Es funktionierte gut auf meine Projekt in Swift 2.3
aber wenn ich aktualisiert, es XCode8
und Swift3
es gibt mir die folgende Fehlermeldung:
Leere Sammlung wörtliche erfordert eine explizite Typ
so, ich habe eine Typumwandlung zu meiner Liste variable:
var list = [] as! NSArray
aber es gibt mir die folgende Warnung:
Gezwungen cast von 'NSArray' auf gleiche Art hat keine Wirkung
Ich weiß, dass eine Ausschreibung nicht brach der Anwendung, aber ich möchte, um dieses Problem zu lösen Fehler in einem richtigen Weg.
Hat jemand den gleichen Fehler und es gelöst richtig?
Vielen Dank im Voraus!
- Sie würden zu tun haben
var list:NSArray = []
. Es ist ok, wenn man einfach ersetzen Sie es mit einem anderen. Aber es ist nicht wandelbar ist, sich selbst, sovar list:NSMutableArray = []
wäre besser nehme ich an. - Was meinst du das wirklich mit der Tatsache, dass nicht veränderlich selbst? Ich weiß, dass veränderlich bedeutet, dass er dessen Werte ändern, aber ich bin nicht wirklich sicher, was meinst du mit "verändert sich".
- CodeDifferent, erklärt Sie in Ihrer Antwort. var/lassen und NSArray/NSMutableArray.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler tritt auf, da implizite Konvertierungen sind abgeschafft, also muss man dem compiler die explizite Typ (der
ArrayLiteral
[]
):Update swift 4 :
Mischen Sie ObjectiveC (
NSArray
) und Swift (Array<T>
). Elemente innerhalb einerNSArray
sind davon ausgegangen, dassNSObject
und Ihre Unterklassen, während Swift hat keine Ahnung, wasT
ist, da der array leer ist und daher Typrückschluss funktioniert nicht.Wenn Sie erklären es wie folgt:
gibt es einen Konflikt, da
var
bedeutet veränderlich in Swift, aberNSArray
ist unveränderlich in ObjC. Kann man umgehen, indem man Sie zuNSMutableArray
, welche eine Unterklasse vonNSArray
:Wenn Sie möchten, um
data
wie SwiftArray
, geben Sie einen Typ aus:Den Swift 5 Führung ist ziemlich explizit über das erstellen von leeren arrays oder dictionaries: https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html#ID461 gegen Ende des ersten Abschnitts.