我有一个这样的Swift struct .

struct Usage {
    var totalData: Double
    var remainingTotalData: Double

    init(jsonData: NSData) {
        var jsonDict = [String: AnyObject]()

        do {
            jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! [String: AnyObject]
        } catch {
            print("Error occurred parsing data: \(error)")
        }

        totalData = jsonDict["totalfup"] as! Double
        remainingTotalData = jsonDict["totalrem"] as! Double
    }
}

从API中,我得到以下JSON响应.这是jsonDict变量的println.

[
    "totalfup": 96.340899, 
    "totalrem": 3548710948
]

当我try 将totalfup的值赋给属性totalData时,我收到此错误.

Could not cast value of type 'NSTaggedPointerString' to 'NSNumber'

有人知道为什么吗?我try 将属性类型更改为float,然后将整个 struct 更改为类,但仍然出现问题.

推荐答案

错误的原因是jsonDict["totalfup"]是字符串(NSTaggedPointerStringNSString的子类),所以您应该将String转换为Double.

Please make sure, catch exception and check type before force-unwrap !

totalData = (jsonDict["totalfup"] as! NSString).doubleValue

对于safety,使用if let:

// check dict["totalfup"] is a String?
if let totalfup = (dict["totalfup"] as? NSString)?.doubleValue {
  // totalfup is a Double here 
}
else {
  // dict["totalfup"] isn't a String
  // you can try to 'as? Double' here
}

Ios相关问答推荐

SWIFT中具有可选返回类型和泛型的网络请求

SwiftUI中的视频时间轴

由于代码签名时出错,无法在iOS设备上发布iOS Maui Build

如何从Windows PC在iPhone上安装Flutter 应用程序

无法添加以供审阅-Xcode 15.0.1

无法关闭包含字体 Select 器的工作表

swiftui动画如何实时确定不对称过渡

如何创建装饰视图?

不可发送类型 '[String : Any]?'在调用非隔离实例方法 XXX 时退出主参与者隔离上下文不能跨越参与者边界

如何在 SwiftUI 中创建两个大小相同的正方形占据整个屏幕宽度?

List touch Tabbar 时 SwiftUI Tabbar 消失

SwiftUI DatePicker 格式在每个设备上都不一样,如何让它总是显示相同的 Select 版本?

XCode 14 Beta 中 NavigationStack 的正文渲染问题

通过 tuist/XcodeProj 以编程方式将文件添加到本机目标

禁用 UITextField 的自动更正

无法同时满足约束 - 没有适当的约束

警告:iPad:Icon-72.png:图标尺寸(0 x 0)

SwiftUI 视图 - viewDidLoad()?

Swift tableView 分页

Xcode 5 和 iOS 7:架构和有效架构