在 Swift 2,如何将 JSON 数组转换为 [Int32]
In Swift 2, how to cast a JSON array to [Int32]
我有以下代码可读入 JSON 文件,然后将其数组转换为 [Float32] 或 [Int32]
let location = NSString(string:"/Users/myname/Documents/test.js").stringByExpandingTildeInPath
let rawData = NSData(contentsOfFile: location)
let modelData = try? NSJSONSerialization.JSONObjectWithData(rawData!, options: NSJSONReadingOptions.AllowFragments)
let dict = modelData as! NSDictionary
guard let vertices = dict["vertices"] as? [Float32] else {
print("error casting vertices")
return
}
guard let indices = dict["faces"] as? [Int32] else {
print("error casting indices")
return
}
JSON文件的内容是:
{
"vertices" : [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9],
"faces" : [0,1,2]
}
JSON 文件已成功加载和解析,但是 vertices
到 [Float32]
的转换成功,而 faces
到 [=17= 的转换] 失败。无论如何要将 faces
转换为 [Int32]
?
只需将其转换为 [Int] 而不是 [Int32]。您可以像这样检查类型
dict["faces"] is [Int]
当您执行 let indices = dict["faces"]
时,indices
数组创建为 Array<Double>
类型,因此您不能将其类型转换为 [Int32]
甚至 [Int]
。您可以尝试使用以下代码将其转换为 [Int32]
let faces = dict["faces"]! as [AnyObject]
let intFaces = (faces as! [Int]).map({Int32([=10=])})
intFaces
将是 [Int32]
类型
我有以下代码可读入 JSON 文件,然后将其数组转换为 [Float32] 或 [Int32]
let location = NSString(string:"/Users/myname/Documents/test.js").stringByExpandingTildeInPath
let rawData = NSData(contentsOfFile: location)
let modelData = try? NSJSONSerialization.JSONObjectWithData(rawData!, options: NSJSONReadingOptions.AllowFragments)
let dict = modelData as! NSDictionary
guard let vertices = dict["vertices"] as? [Float32] else {
print("error casting vertices")
return
}
guard let indices = dict["faces"] as? [Int32] else {
print("error casting indices")
return
}
JSON文件的内容是:
{
"vertices" : [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9],
"faces" : [0,1,2]
}
JSON 文件已成功加载和解析,但是 vertices
到 [Float32]
的转换成功,而 faces
到 [=17= 的转换] 失败。无论如何要将 faces
转换为 [Int32]
?
只需将其转换为 [Int] 而不是 [Int32]。您可以像这样检查类型
dict["faces"] is [Int]
当您执行 let indices = dict["faces"]
时,indices
数组创建为 Array<Double>
类型,因此您不能将其类型转换为 [Int32]
甚至 [Int]
。您可以尝试使用以下代码将其转换为 [Int32]
let faces = dict["faces"]! as [AnyObject]
let intFaces = (faces as! [Int]).map({Int32([=10=])})
intFaces
将是 [Int32]