Как преобразовать Any в Int в Swift

Я получаю сообщение об ошибке при объявлении i

var users =  Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])

Как получить значение int?

Ответ 1

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

Как указывает GoZoner, если вы не знаете, что преуменьшение будет успешным, используйте:

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

Результат будет nil, если он терпит неудачу

Ответ 2

Свифт 4:

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

Ответ 3

Если вы уверены, что результатом является 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

Ответ 4

if let id = json["productID"] as? String {
   self.productID = Int32(id, radix: 10)!
}

Это сработало для меня. json["productID"] имеет тип Any. Если он может быть приведен к строке, то преобразуйте его в целое число.

Ответ 5

Возможно, это сработало ранее, но это не ответ для 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

Ответ 6

Преобразование String в Integer в Swift 4

let intValue = "10" as! Int
var intValueFromString:Int = "10" as! Int