【问题标题】:Swift: casting Optional<AnyObject> to TimeInterval errorSwift:将 Optional<AnyObject> 转换为 TimeInterval 错误
【发布时间】:2017-08-29 10:21:31
【问题描述】:

我正在尝试将来自不同来源的 Optional&lt;AnyObject&gt; 转换为 TimeInterval 对象。但我面临以下问题:

案例 1:来自 JSON 文件

我有一个 JSON 文件

{
 ...
 "dispatchInterval":50,
 ...
}

然后我用JSONSerialization 创建一个字典。

let settingJson = try? String(contentsOfFile:filePath, encoding: String.Encoding.utf8)

cofigDict:[String:AnyObject] = try JSONSerialization.jsonObject(with: settingJson.data(using: String.Encoding.utf8)!, options:.allowFragments) as! [String:AnyObject]

所以configDict[ConfigKey.dispatchInterval] 的类型是 Optional(AnyObject)。并将其转换为 TimeInterval 有效(间隔不是 nil 而是设置为 50):

let interval = configDict[ConfigKey.dispatchInterval] as? TimeInterval

案例 2:来自字典

这里我使用字典来设置间隔值。

 let configDict = [... "dispatchInterval":50, ...] as [String : AnyObject]

这里我们不需要JSONSerialization

同样,configDict[ConfigKey.dispatchInterval] 的类型也是 Optional(AnyObject)

但将其转换为 TimeInterval 不起作用(间隔为 nil)。

这不应该发生,因为我检查了这两种情况的 configDict[ConfigKey.dispatchInterval] 类型。只有Optional(AnyObject)

还有什么办法

let interval = configDict[ConfigKey.dispatchInterval] as? TimeInterval

两种情况都适用?

【问题讨论】:

  • 我认为您的代码看起来应该可以工作。你能提供一个重现这个问题的mcve吗?我可以在操场上运行并查看您获得的结果。

标签: json swift dictionary swift3


【解决方案1】:

你可以这样做:

 let interval : TimeInterval? =   configDict[ConfigKey.dispatchInterval]?.doubleValue

【讨论】:

  • 你能解释一下是什么问题吗?
  • 无法将 AnyObject 转换为 Timeinterval 它的双精度值不是对象
  • 但是案例之间有什么区别呢?如果它取自 json 文件或 json 字符串,即使它是 AnyObject,它也可以正常工作。
  • 你把它当成字符串了吗:AnyObject
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多