Я получаю сообщение об ошибке при объявлении i
var users = Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])
Как получить значение int?
Я получаю сообщение об ошибке при объявлении i
var users = Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])
Как получить значение int?
var i = users[0]["Age"] as Int
Как указывает GoZoner, если вы не знаете, что преуменьшение будет успешным, используйте:
var i = users[0]["Age"] as? Int
Результат будет nil
, если он терпит неудачу
Свифт 4:
if let str = users[0]["Age"] as? String, let i = Int(str) {
// do what you want with i
}
Если вы уверены, что результатом является Int
используйте:
var i = users[0]["Age"] as! Int
но если вы не уверены и хотите получить значение nil
если оно не является Int
используйте:
var i = users[0]["Age"] as? Int
"Используйте необязательную форму оператора приведения типа (as?), Если вы не уверены, что обратный вызов завершится успешно. Эта форма оператора всегда будет возвращать необязательное значение, и значение будет равно нулю, если обратное преобразование невозможно. Это позволяет вам проверять успешное снижение. "
Выдержка из: Apple Inc. "Язык программирования Swift". интерактивные книги. https://itun.es/us/jEUH0.l
if let id = json["productID"] as? String {
self.productID = Int32(id, radix: 10)!
}
Это сработало для меня. json["productID"]
имеет тип Any
. Если он может быть приведен к строке, то преобразуйте его в целое число.
Возможно, это сработало ранее, но это не ответ для Swift 3. Просто, чтобы уточнить, у меня нет ответа для Swift 3, ниже мое тестирование с использованием вышеуказанного ответа, и, очевидно, это не работает.
Мои данные взяты из 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)!)")
}
Сгенерированный результат:
subvalue[multi] = 1
as Int = nil
Просто чтобы прописать это:
a) Исходное значение имеет тип Any? и значение равно: 1
б) Результаты литья до Int в ноль
c) Литье в String приводит к нулю (строки печати никогда не выполняются)
ИЗМЕНИТЬ
Ответ заключается в использовании NSNumber
пусть num = subvalue [ "multi" ] as? NSNumber
Затем мы можем преобразовать число в целое число let myint = num.intValue
let intValue = "10" as! Int
var intValueFromString:Int = "10" as! Int