pojawia się błąd podczas deklarowania IJak przekonwertować dowolny int w Swift
var users = Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])
Jak uzyskać wartość int?
pojawia się błąd podczas deklarowania IJak przekonwertować dowolny int w Swift
var users = Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])
Jak uzyskać wartość int?
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
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
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
Dobrze. Myślę, że Apple może pomyśleć o 'jak Int' i' jak Int? 'Zamiast przedstawiać' as? ' – GoZoner
To naprawdę dobry punkt. Przypuszczam, że 'as?' Jest równoważne '-isKindOfClass:', ale przenoszenie '?' Miałoby sens. – Ephemera
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
Może problem polega na tym, że używasz 'NSDictionary' zamiast' Dictionary'? 'jak? Int' powinien działać dobrze w Swift 3. –
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ć. –
Swift 4 odpowiedź:
if let str = users[0]["Age"] as? String, let i = Int(str) {
// do what you want with i
}
czasami zwraca nil.Użyłem tej metody do analizy z 'WKBridge' –