So ordnen Sie ein Wörterbuch, um AnyObject in swift
Ich habe das Spiel mit Swift. Ich habe mehrere Fehler mit Arten, vor allem die Arbeit mit Swift und meine alten Objektive-C Klassen. Das problem mit dieser Methode ist: ich erwarte ein array aus NSDictionarys in Objective-C.
var curArr:[Dictionary<String, AnyObject>] = self.getItemsForCurrentStack()
var arrToReturn:[(Dictionary<String, AnyObject?>)] = []
for obj in curArr{
arrToReturn.append(["image": UIImage(named: obj["imageName"] as! String), "color": UIColor(red:obj["colorDic"]!["red"] as! CGFloat, green:obj["colorDic"]!["green"] as! CGFloat, blue:obj["colorDic"]!["blue"] as! CGFloat, alpha:1.0), "percentage": obj["percantage"]])
}
return arrToReturn
Diese gibt Wörterbücher (die NSDictionaries) in Swift. Aber die Letzte Zeile wirft mir einen Fehler:
Dictionary' ist nicht gleich 'AnyObject'
Ich habe versucht, mit as! [AnyObject]
Aber das wirft eine andere Fehlermeldung:
'AnyObject' ist kein Subtyp von 'Wörterbuch'
Habe ich nicht den zweiten Fehler, da dies nicht zu den Untertyp, aber der andere Weg herum. Irgendwelche Ideen auf, wie man dieses Problem lösen? Ich habe nicht eine Antwort für mehrere Stunden googleing und zu erforschen.
InformationsquelleAutor user2456014 | 2015-04-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dictionary
ist eine Struktur, in der Schnelle, in der Erwägung, dassAnyObject
istJe nachdem, was Sie versuchen zu tun, die Sie verwenden möchten, können
Any
im code, oder werfen Sie Ihre Wörterbuch, um NSDictionary mitas NSDictionary
.Bearbeiten, wenn Ihre Klarstellung:
Wenn Sie aufgeteilt, die
append
Anruf aus dem Wörterbuch selbst, Sie sehen, dass eine bessere Fehlermeldung:So, das Problem ist, dass das Wörterbuch enthält einige
Optional
- Werten, aber Optional ist eine Struktur, und nicht Cabrio, Obj-C. können Sie beheben, indem Sie die UmwandlungUIImage!
undAnyObject!
(ImplicitlyUnwrappedOptional) oder durch die Verwendungas!
.var arrToReturn:[NSDictionary] = [] for obj in curArr{ arrToReturn.append(["image": UIImage(named: obj["imageName"] as! String), "color": UIColor(red:obj["colorDic"]!["red"] as! CGFloat, green:obj["colorDic"]!["green"] as! CGFloat, blue:obj["colorDic"]!["blue"] as! CGFloat, alpha:1.0), "percentage": obj["percantage"]] as! NSDictionary) }
bekomme ich den Fehler:Cannot invoke 'append' with an argument list of type '(NSDictionary)'
Mit Jedem ist nicht möglich, da diese Methode generiert wird, die von Xcode und kann nicht geändert werden, weil es erwartet Sie ein NSArray in Objective-C-code.
Welche Xcode-version verwenden Sie? Es funktioniert für mich.
Ich bin mit Xcode 6.3, also die Letzte offizielle version. Der ganze Spielplatz ich Teste das in: fs2.directupload.net/images/150419/gcgqk9t9.png
Vielen Dank, das funktioniert jetzt!
InformationsquelleAutor jtbandes
Dein code funktioniert einwandfrei Spielplatz, ohne compile-oder runtime-Fehler. Hier ist, was ich Hinzugefügt Auffüllen
curArr
:Alle diese erzwungene unwrapping ich denke, Sie müssen nur sicherstellen, dass das, was
self.getItemsForCurrentStack()
gibt ist in der Tat das, was Sie erwarten.Führen Spielplatz:
Meine Empfehlung wäre umgestalten, in die Objekte -, würde Ihren code so viel besser lesbar!
InformationsquelleAutor Mundi
In Swift 3
InformationsquelleAutor Claudio Guirunas