【发布时间】:2017-08-29 10:21:31
【问题描述】:
我正在尝试将来自不同来源的 Optional<AnyObject> 转换为 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