似乎应该是相当微不足道的事情已经引起了我很多问题。我试图从String转换一个大整数到Int类型。基本上我有一个64位散列,在某一点上作为String传递,我需要将它转换回Int。
根据我能找到的所有文档,在Swift中,Int类型是64位。调用,Int(str)应该处理64位转换就好了。但似乎它试图将其转换为32位整数,因此我收到一个零值。由于各种原因,我无法使用Int64()(简而言之,我的哈希表中的键必须是Int而不是Int64类型)。
代码如下所示:
在课程开始时宣布:
res/values-large-mdpi/dimens.xml (600x1024)
res/values-sw600dp/dimens.xml (600x1024)
res/values-sw720dp/dimens.xml (800x1280)
res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10")
res/values-large-xhdpi/dimens.xml (1200x1920 - Nexus 7"(latest))
稍后在某个函数中声明:
var nameTable: Dictionary<Int, String> = [:]
let kv = data[i].componentsSeparatedByString(":")
self.nameTable[Int(kv[0])!] = kv[1]
和kv[0]="3928953869951869841"
kv[1]="a"
在哪里失败,因为在意外时返回了nil值。
Int(kv([0])!
返回值2147483647,32位max int,考虑到所有docs将int作为64位值,这对我来说很奇怪。代码已经在iPhone 5 - 6上运行,所有结果都相同。
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
Int(“string”) - 是可选类型 如果要排除nil异常,请尝试以下代码:
let stingNumber = "3928953869951869841"
if let index = Int64("\(stingNumber)") {
self.nameTable[index] = "a"
NSLog("\(self.nameTable)")
NSLog("\(Int64.max)")
}
我在iPhone 4s上模拟了这个,我有日志:
2016-08-10 15:22:24.199 stackoverlow-38866748[52907:1401199] [3928953869951869841: "a"]
2016-08-10 15:22:24.202 stackoverlow-38866748[52907:1401199] 9223372036854775807
答案 1 :(得分:0)
请参阅中的Int
Apple开发者文档:
在32位平台上,
Int
与Int32
的大小相同,在64位平台上,Int
的大小与Int64
相同。
3928953869951869841
超出了32位整数的范围。
因此,为了将该值存储为整数,您具有
使用Int64
(或UInt64
),无法绕过它(除非应用仅限于64位设备)。
另请注意hashValue()
州的文档:
在程序的不同执行中,不保证哈希值相等。不要保存在将来执行期间使用的哈希值。