我正在尝试从不同来源投射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
作品(间隔不是零,但设置为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
适用于这两种情况吗?
答案 0 :(得分:0)
你可以这样做:
let interval : TimeInterval? = configDict[ConfigKey.dispatchInterval]?.doubleValue