2014-09-25 12 views
5

Używam zarówno szybkiego, jak i obiektywnego-c w mojej aplikacji.Dodawanie zawartości NSArray do Swift Array

Mam CustomClass i chcę utworzyć tablicę swift dla klasy i dodać do niej zawartość z mojej klasy-c o nazwie oldClass, która ma tablicę tych obiektów w NSArray nazwie arrayOfCustomClass.

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

To powoduje błąd:

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

pomocy? dziękuje Reza

+1

Pokaż pozostałą część rzeczywistego kodu! Co to jest "oldClass"? Czym jest "arrayOfCustomClass"? – matt

Odpowiedz

0

Problem polega na tym, że Swift nie wie o tym, co jest w NSArray. Musisz rzucić NSArray jawnie na numer [CustomClass] (lepiej nie kłamać, bo ulegniesz awarii w czasie wykonywania).

+0

Ale mogą tu być dodatkowe problemy, które nie będą znane, dopóki nie ujawnisz, czym naprawdę jest 'tablicaOfCustomClass'. – matt

+0

Jak moja odpowiedź poniżej pokazuje, musiałem rzucić do AnyObject zanim mogłem rzucić do CustomClass – reza23

+0

Można to zrobić bezpiecznie z opcjonalnym rzutem - zobacz moją odpowiedź. –

0

Co wydaje się działać to:

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

Aby to zrobić bezpiecznie po prostu trzeba spróbować opcjonalnego obsady. Jeśli uważasz, że NSArray ma tylko elementy typu CustomClass, można to zrobić:

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

Jeśli chcesz wyodrębnić CustomClass elementy (trochę różne od tego, co pytasz, wiem), w ten sposób:

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