从 Swift 4 更新到 4.1 后的转换问题
Casting problems after updating from Swift 4 to 4.1
我遇到了一个奇怪的问题,在更新到 Swift 4.1 之后,从 JSON 到 [[Float]] 的转换失败。让我快速展示代码。
Alamofire.request(url,
method: .get, parameters: nil, headers: headers()).responseJSON(queue: queue, completionHandler: { response in
if let floatDoubleArray = response.result.value as? [[Float]] {
// Do stuff
}
}
以上在 Swift 4.0 中运行得很好,但突然失败了。我得到的回复如下。
<__NSArrayI 0x7fb9d02fd800>(
0,
0.05,
0.051,
0.052,
0.051,
0.05,
0.05,
0.049,
0.048,
0.048,
0.047,
0.047,
0.047,
0.046,
0.046,
0.047,
0.047,
0.047,
0.048,
0.048,
0.049,
0.049,
0.05,
0.051,
0.051,
0,
0,
0,
0,
0,
0,
0
)
,
<__NSArrayI 0x7fb9d02fde00>(
0,
0.051,
0.051,
0.051,
0.05,
0.05,
0.049,
0.048,
0.048,
0.048,
0.047,
0.047,
0.047,
0,
0,
0,
0,
0,
0,
0
)
)
)
如果我尝试将其强制转换为 [[Float]],我会得到
"Unable to bridge NSNumber to Float"
有什么解决办法吗? 运行 使用 Swift 4.0.
一切正常
你能试试吗
if let floatDoubleArray = response.result.value as? [[NSNumber]] {
let floatArr = floatDoubleArray.map{[=10=].map{[=10=].floatValue}}
}
我遇到了一个奇怪的问题,在更新到 Swift 4.1 之后,从 JSON 到 [[Float]] 的转换失败。让我快速展示代码。
Alamofire.request(url,
method: .get, parameters: nil, headers: headers()).responseJSON(queue: queue, completionHandler: { response in
if let floatDoubleArray = response.result.value as? [[Float]] {
// Do stuff
}
}
以上在 Swift 4.0 中运行得很好,但突然失败了。我得到的回复如下。
<__NSArrayI 0x7fb9d02fd800>(
0,
0.05,
0.051,
0.052,
0.051,
0.05,
0.05,
0.049,
0.048,
0.048,
0.047,
0.047,
0.047,
0.046,
0.046,
0.047,
0.047,
0.047,
0.048,
0.048,
0.049,
0.049,
0.05,
0.051,
0.051,
0,
0,
0,
0,
0,
0,
0
)
,
<__NSArrayI 0x7fb9d02fde00>(
0,
0.051,
0.051,
0.051,
0.05,
0.05,
0.049,
0.048,
0.048,
0.048,
0.047,
0.047,
0.047,
0,
0,
0,
0,
0,
0,
0
)
)
)
如果我尝试将其强制转换为 [[Float]],我会得到
"Unable to bridge NSNumber to Float"
有什么解决办法吗? 运行 使用 Swift 4.0.
一切正常你能试试吗
if let floatDoubleArray = response.result.value as? [[NSNumber]] {
let floatArr = floatDoubleArray.map{[=10=].map{[=10=].floatValue}}
}