【问题标题】:Core Data and making double from type AnyObject? Swift核心数据并从 AnyObject 类型中获取双倍?迅速
【发布时间】:2016-06-15 12:40:38
【问题描述】:

我正在为CoreData 编写代码。我的数据模型包括名称和moneyAmount。这是我遇到问题的代码部分

 do {
        let request = NSFetchRequest(entityName: "MoneyData")
        let results = try context.executeFetchRequest(request)
        if results.count > 0 {
            for item in results as! [NSManagedObject] {
                let name = String(item.valueForKey("name"))
                let moneyAmount = item.valueForKey("moneyAmount")
                moneyManager.addMoney(name, moneyAmount: moneyAmount)
            }
        }
    } catch {
        print("There was an error saving data")
    }

现在的问题是我的moneyManager.addMoney 需要StringDouble。但是,使用此代码,我得到的错误是:

可选链没有效果,已经产生'Anyobject?'

无法转换 AnyObject 类型的值?到预期的参数类型“双”

我不太明白Anyobject 是什么意思。我认为我应该将 anyobject 转换为 double 以使其正常工作?

提前致谢

【问题讨论】:

  • 如果你确定 moneyAmount 是 Double,你可以像 let moneyAmount = item.valueForKey("moneyAmount") 那样转换它!双
  • 您是否考虑过确保moneyAmount 是双倍的?例如类似于: let moneyAmount = Double(item.valueForKey("moneyAmount"))
  • 是的,我确实做了两个,第一个有效。而且我也尝试了多米尼克所说的,但是,即使它只能是双重的,我仍然遇到错误

标签: ios iphone swift core-data


【解决方案1】:

valueForKey() 返回一个AnyObject 类型的对象,因为在编译时无法知道它引用的是什么类型的对象。您可以使用as 强制转换为特定类型。例如,moneyAmount as? Double 将生成 Double? 类型的对象,或者包含数值,或者如果对象不是 Double 类型,则为 nil

【讨论】:

  • 谢谢,现在可以了。但如果不是这样呢?而是作为!因为我特别知道类型是 Double?
  • 如果你使用as!而不是as?,这意味着你确定它会是一个Double,这个值永远不会是nil。但如果不是Double 而你使用as!,你的应用就会崩溃
猜你喜欢
  • 2019-10-21
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2016-12-01
相关资源
最近更新 更多