0

私は一生、NSCacheのオプションに関係するものを保存する方法を理解できません。オプションを直接保存するのは意味がないことは理解できますが、一部のオプションがオプションである可能性のある配列または辞書を保存することは、確かに可能であるように思われます。

しかし、単純な例ではうまくいきません:

let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")

私が見落としているものはありますか、それとも本当にこれを行う方法はありませんか?

4

1 に答える 1

1

答えは

let dict: [String: String?] = ["foo": "bar"]
NSCache().setObject(dict, forKey: "dict")

エラー: 引数の型 '[String : String?]' は、期待される型 'AnyObject' NSCache().setObject(dict, forKey: "dict") に準拠していません

protocol AnyObject { ... } すべてのクラスが暗黙的に準拠するプロトコル。辞書は構造体です

class C {}
let cls: C = C()
NSCache().setObject(cls, forKey: "cls")

しかし!!cls が nil になる可能性がある場合は、暗黙的に unwrap オプションを使用する必要があります。

let cls: C? = C()
NSCache().setObject(cls, forKey: "cls")
//error: value of optional type 'C?' not unwrapped; did you mean to use '!' or '?'?
NSCache().setObject(cls, forKey: "cls")

だからあなたは使わなければならない

let cls: C! = C()
NSCache().setObject(cls, forKey: "cls")

Optional<Type>も構造体です!

于 2015-12-22T19:19:48.440 に答える