2014-09-25 14 views
5

Sto usando sia rapida e Objective-C nella mia app.Aggiunta del contenuto di NSArray a Array Swift

Ho una CustomClass e voglio creare un array rapido per la classe e aggiungere contenuto alla mia classe obiettivo-c chiamata oldClass che ha una matrice di questi oggetti in un NSArray chiamato arrayOfCustomClass.

var newArray = [CustomClass]() 
newArray += oldClass.arrayOfCustomClass 

Questo causa un errore:

'[(CustomClass)]' is not identical to 'CGFloat' 

Qualsiasi aiuto? grazie Reza

+1

Mostra il resto del codice effettivo! Cos'è 'oldClass'? Cos'è 'arrayOfCustomClass'? – matt

risposta

0

Il problema è che Swift non sa nulla di ciò che è in un NSArray. È necessario trasmettere NSArray esplicitamente a [CustomClass] (e sarebbe meglio non mentire o crash in fase di esecuzione).

+0

Ma potrebbero esserci ulteriori problemi qui, che non saranno noti fino a quando non rivelerai cosa sia realmente 'arrayOfCustomClass'. – matt

+0

Come la mia risposta qui sotto mostra avevo bisogno di lanciare a ANYOBJECT prima che potessi lanciare al CustomClass – reza23

+0

Questo può essere fatto in modo sicuro con un cast opzionale - vedi la mia risposta. –

0

Ciò che sembra funzionare è:

newArray += oldClass.arrayOfCustomClass as AnyObject as [CustomClass] 
0

Per fare questo in modo sicuro si solo bisogno di provare un cast opzionale. Se pensate che il NSArray deve solo elementi di tipo CustomClass, si può fare questo:

var newArray = [CustomClass]() 
if let customArray = oldClass.arrayOfCustomClass as? [CustomClass] { 
    newArray += customArray 
} 

Se si desidera estrarre le CustomClass elementi (un po 'diverso da quello che hai chiesto, lo so), questo è il modo:

var newArray = [CustomClass]() 
for element: AnyObject in oldClass.arrayOfCustomClass { 
    if let custom = element as? CustomClass { 
     newArray.append(custom) 
    } 
} 
Problemi correlati