NSData を NSUserDefaults からカスタム オブジェクトにアーカイブ解除するためのコードを作成しようとしていますが、これまでのところ -
class func itemForKey<T>(key: String) -> T?
{
let userDefaults = NSUserDefaults.standardUserDefaults()
var value : T?
if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData
{
value = NSKeyedUnarchiver.unarchiveObjectWithData(dataObj) as? T
}
return value
}
残念ながら、ゴミを返します。アーカイブ解除の時点でクラス型の T を切り替えると、オブジェクトは正しく作成されます -
class func itemForKey<T>(key: String) -> T?
{
let userDefaults = NSUserDefaults.standardUserDefaults()
var value : T?
if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData
{
let obj = NSKeyedUnarchiver.unarchiveObjectWithData(dataObj) as? CustomObject // correct at this point
しかし、明らかにこれはジェネリックの目的を無効にします。
ヘルプなど、大歓迎です