2015-09-07 19 views
6

a Swift, ho una classe School, ha un students proprietà di tipo [AnyObject]!Non è possibile assegnare un valore di tipo 'NSArray' per un valore di tipo '[ANYOBJECT]'

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

ho ricevuto un'istanza di School e un di stringa che rappresenta i nomi degli studenti. Voglio assegnare questa variabile NSArray-students:

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

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

Perché questo errore? L'array non è compatibile in modo rapido con NSArray nell'obiettivo c ??? Come sbarazzarsi di errore del compilatore sopra?

+0

L'utilizzo del tipo effettivo nella dichiarazione consente al compilatore di applicare compiti che generalmente sono una "cosa buona". – zaph

risposta

6

Il var students è un array Swift e si aspetta oggetto di tipo AnyObject, ma si prova ad assegnarlo a NSArray. I due oggetti non sono dello stesso tipo e non funziona.

Ma, visto che NSArray è compatibile con [AnyObject], è possibile utilizzare semplici typecasting per rendere il NSArray in una matrice di Swift:

school.students = studentArray as [AnyObject] 

Naturalmente un approccio migliore sarebbe quello di rimanere nel mondo Swift e alla dimenticare NSArray del tutto, se possibile, facendo sì che getAllStudents restituisca una matrice Swift invece di un NSArray. Non solo eviterai di dover fare tipografie, ma potrai anche beneficiare della potenza delle collezioni Swift.

2

Suona come school.students è definita come opzionale e potrebbe essere pari a zero, pertanto se si è sicuri che la sua non nullo - scartare per primo usando:!

school.students as AnyObject! as NSArray 

O

school.students! as NSArray 
0

mio metodo scritto nell'oggetto c che restituisce NSMutableArray di tipo "Database"

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

In swift i dec Lare variabile come

var petListArray: NSMutableArray = [] 

Salva in ordine di modello come

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

Utilizzato in cellForRowAtIndexPath

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

speranza questo aiuto a qualcuno.

Problemi correlati