如何在Swift中将任意字符转换为Int

如何在Swift中将任意字符转换为Int,swift,Swift,我在声明I时出错 var users = Array<Dictionary<String,Any>>() users.append(["Name":"user1","Age":20]) var i:Int = Int(users[0]["Age"]) var users=Array() users.append([“Name”:“user1”,“Age”:20]) 变量i:Int=Int(用户[0][“年龄”]) 如何获取int值?var i=users[0][“A

我在声明I时出错

var users =  Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])
var users=Array()
users.append([“Name”:“user1”,“Age”:20])
变量i:Int=Int(用户[0][“年龄”])
如何获取int值?

var i=users[0][“Age”]作为int

正如GoZoner所指出的,如果你不知道沮丧会成功,请使用:

var i=users[0][“Age”]as?Int


如果失败,结果将为
nil
,如果您确定结果为
Int
,则使用:

var i = users[0]["Age"] as! Int
var i = users[0]["Age"] as? Int
但是如果您不确定并且想要一个
nil
值,如果它不是
Int
,则使用:

var i = users[0]["Age"] as! Int
var i = users[0]["Age"] as? Int
“如果需要,请使用类型转换运算符(as?)的可选形式 不确定下行是否会成功。这种形式的运算符将 始终返回可选值,如果 无法向下播放。这使您能够检查是否成功播放 沮丧。”

摘自:苹果公司《Swift编程语言》。iBooks。


这可能在以前起过作用,但它不是Swift 3的答案。只是澄清一下,我没有Swift 3的答案,下面是我使用上述答案进行的测试,显然它不起作用

我的数据来自一本词典

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
b) 强制转换为Int将导致零
c) 转换为字符串将导致nil(打印行永远不会执行)

编辑
答案是使用NSNumber
设num=subvalue[“multi”]为?NSNumber

然后我们可以将数字转换为整数
让myint=num.intValue回答:

if let str = users[0]["Age"] as? String, let i = Int(str) {
  // do what you want with i
}
这对我有用
json[“productID”]
的类型为
Any

如果可以将其转换为字符串,则将其转换为整数

值得注意的是,第一个示例中的
i
类型是
Int
,但第二个示例中的
i
类型将是
Int?
。我认为苹果公司可能会把
看作Int
看作Int?
而不是把
看作
这实际上是一个很好的观点。我认为
as?
相当于
-iskindof类:
,但是移动
是有意义的。可能问题是您使用的是
NSDictionary
而不是
Dictionary
<代码>作为?Int
在Swift 3中应该可以正常工作。事实上,是的,这就是问题所在
NSDictionary
值是
AnyObject
,不能强制转换为
Int
,因为它不是对象类型。改用Swift字典,它应该会工作。有时它会返回nil。我使用此方法从
WKBridge
解析内容,我遇到了一个问题,即展开内容,这看起来像是可选的(3)。我试着把它演成?那是什么?字符串-两者都失败。然后尝试展开并使用导致异常的类型,这表明Swift决定将Int8用于该值。因此,人们认为Int8不能转换成Int。最后检查了if/else流中的所有int类型。