2017-08-29 5 views
0

Optional<AnyObject>からTimeIntervalに異なるソースのオブジェクトをキャストしようとしています。スイフト:キャストオプション<AnyObject>からTimeIntervalエラー

ケース1:しかし、私は次の問題に直面していますJSONファイル

から私はその後、私はJSONSerializationと辞書を作成JSONファイル

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

を持っています。

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)です。そして、(間隔がゼロではなく、50に設定されている)TimeInterval作品にキャスト:私は間隔の値を設定するために辞書を使用しています。ここ辞書から

:2

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

ケース。

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

私はそれが動作するはずのようなコードが見えると思います。この問題を再現するmcveを提供できますか?私はちょうど遊び場で走って、あなたが得ている結果を見ることができます。 – Sweeper

答えて

0

あなたがそのようにそれを行うことができます。

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

問題点を教えてください。 – user93726

+0

AnyObjectをTimeintervalに変換できません。オブジェクトのdouble値ではありません –

+0

しかし、ケースの違いは何ですか?たとえそれがAnyObjectであっても、jsonファイルまたはjson文字列から取得した場合は正常に動作します。 – user93726

関連する問題