2015-09-07 12 views
6

In swift zuweisen, ich habe eine School Klasse, es hat eine students Eigenschaft vom Typ [AnyObject]!kann keinen Wert vom Typ ‚NSArray‘ auf einen Wert des Typs ‚[ANYOBJECT]‘

class School : NSObject { 
    var students: [AnyObject]! 
    ... 
} 

ich eine Instanz bekam von School und eine NSArray Zeichenfolge, die die Namen der Schüler darstellt. Ich möchte diese NSArray Variable students zuzuweisen:

var school = School() 
var studentArray : NSArray = getAllStudents() 

//ERROR:Cannot assign a value of type 'NSArray' to a value of type '[AnyObject]' 
school.students = studentArray 

Warum dieser Fehler? Ist Array nicht in Swift kompatibel mit NSArray in Ziel c ??? Wie kann man den obigen Compilerfehler loswerden?

+0

Die Verwendung des tatsächlichen Typs in der Deklaration ermöglicht es dem Compiler, Zuweisungen zu erzwingen, was im Allgemeinen eine "gute Sache" ist. – zaph

Antwort

6

Ihr var ist ein Swift-Array und erwartet Objekt vom Typ AnyObject, aber Sie versuchen, es eine NSArray zuweisen. Die beiden Objekte sind nicht vom selben Typ und funktionieren nicht.

Aber, da NSArray ist kompatibel mit [AnyObject] Sie einfach eine Schublade gesteckt verwenden können die NSArray in ein Swift-Array zu machen:

school.students = studentArray as [AnyObject] 

Natürlich ein besserer Ansatz in der Swift Welt bleiben würde und Vergessen Sie NSArray, wenn möglich, indem Sie getAllStudents ein Swift-Array anstelle eines NSArray zurückgeben. Nicht nur Sie werden vermeiden, typecasts zu tun, aber Sie werden auch von der Macht der Swift-Sammlungen profitieren.

2

Klingt wie school.students als Optional definiert und könnte Null daher, wenn Sie sicher sind, dass es nicht gleich Null - es auszupacken zuerst unter Verwendung:

school.students as AnyObject! as NSArray 

ODER

school.students! as NSArray 
0

Meine Methode geschrieben in Objekt c, die NSMutableArray vom Typ "Datenbank" zurückgeben

-(NSMutableArray *)AllRowFromTableName:(NSString *)tableName; 

In swift ich dez lare Variable als

var petListArray: NSMutableArray = [] 

Speichern in Modellanordnung als

self.petListArray = self.dataBase.AllRowFromTableName("InsuranceTable") 

in cellForRowAtIndexPath Gebrauchte

let tempDBObject = self.petListArray[indexPath.row] as! Database 
cell?.petName.text = tempDBObject.Hname 

Hoffnung diese Hilfe jemand.

Verwandte Themen