2014-06-06 19 views

Odpowiedz

14

var i = users[0]["Age"] as Int

Jak GoZoner zwraca uwagę, jeśli nie wiesz, że przygnębiony uda, przeznaczenie:

var i = users[0]["Age"] as? Int

wynik będzie nil jeśli nie

+0

czasami zwraca nil.Użyłem tej metody do analizy z 'WKBridge' –

5

If masz pewność, że wynikiem jest Int, a następnie użyj:

var i = users[0]["Age"] as Int 

ale jeśli nie jesteś pewien i chcą wartość nil jeśli nie jest to Int następnie użyć:

var i = users[0]["Age"] as? Int 

„Użyj opcjonalnej formę operatora typ odlewu gdy jesteś nie (jak?) pewnie, jeśli downcast się powiedzie. Ta forma operatora będzie zawsze zwracać opcjonalną wartość, a wartość będzie zerowa, jeśli odrzucenie nie było możliwe. Umożliwia to sprawdzenie rzuconego downcastu . "

Fragment: Apple Inc." The Swift Programming Language. "IBooks. https://itun.es/us/jEUH0.l

+1

Warto zauważyć, że typ' i' w pierwszym przykładzie to 'Int', ale typ' i' w drugim przykładzie będzie miał postać 'Int?'. – Ephemera

+0

Dobrze. Myślę, że Apple może pomyśleć o 'jak Int' i' jak Int? 'Zamiast przedstawiać' as? ' – GoZoner

+0

To naprawdę dobry punkt. Przypuszczam, że 'as?' Jest równoważne '-isKindOfClass:', ale przenoszenie '?' Miałoby sens. – Ephemera

-1

Mogło pracował wcześniej, ale to nie jest odpowiedź na Swift 3. Właśnie w celu wyjaśnienia, nie mam odpowiedź dla Swift 3, poniżej jest moje badania stosując powyższą odpowiedź, i to wyraźnie nie działa.

Moje dane pochodzą z NSDictionary

print("subvalue[multi] = \(subvalue["multi"]!)") 
print("as Int = \(subvalue["multi"]! as? Int)") 
if let multiString = subvalue["multi"] as? String { 
    print("as String = \(multiString)") 
    print("as Int = \(Int(multiString)!)") 
} 

Wyjście generowany jest:

subvalue[multi] = 1 
as Int = nil 

Wystarczy przeliterować:
a) oryginalna wartość jest typu Any? i wartość ta wynosi: 1
b) Casting do int wyników w nil
c) Casting do wyników smyczkowy zera (linie druku nigdy wykonać)

EDIT
Odpowiedź jest użycie NSNumber
let num = undervalue ["multi"] as? NSNumber

Wtedy możemy przekonwertować liczbę do liczby całkowitej
let Myint = num.intValue

+0

Może problem polega na tym, że używasz 'NSDictionary' zamiast' Dictionary'? 'jak? Int' powinien działać dobrze w Swift 3. –

+0

Właściwie, tak, to zdecydowanie problem. Wartości 'NSDictionary' to' AnyObject', który nie może rzutować na 'Int', ponieważ nie jest typem obiektu. Zamiast tego użyj słownika Swift, który powinien działać. –

1

Swift 4 odpowiedź:

if let str = users[0]["Age"] as? String, let i = Int(str) { 
    // do what you want with i 
} 
Powiązane problemy