2015-06-04 95 views
-1

有没有一种方法可以让我施展这个斯威夫特数据以某种方式设置为一个形式,是可以接受的NSUserDefauts?即NSObjectNSSet? (附注:我知道NSUserDefaults不是这种类型的数据,但我只是测试)在Swift中将结构铸造成NSUserDefaults?

struct Users { 
     var name: String = "" 
     var stores: [Store] 
    } 

    struct Store { 
     var name: String = "" 

     var clothingSizes = [String : String]() 

    } 

    init() { 
     let userDefaults = NSUserDefaults.standardUserDefaults() 

     if let usersPeople = userDefaults.valueForKey("Users") as? 
+1

很肯定你是有限的,你可以在斯威夫特存储什么类型的:http://stackoverflow.com/a/2315972/620197 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/基金会/班/ NSUserDefaults_Class/index.html的#// apple_ref/OCC/instm/NSUserDefaults的/的setObject:forKey: –

+0

但问题是关于铸造,对不对? –

+0

是的,我看到的实施例总是存储阵列或NSUserDefaults的在核心数据等....我的数据结构是数组的数组,Store对象具体地,是与一个词典,的阵列相关联的字符串,它是我能不知道如何存储在NSUserDefults之类的非Swift API中。 – GarySabo

回答

2

我想你可以使用Dictionary。您需要制作方法将数据包装到结构中,反之亦然。

例如:

var users : [String: AnyObject]() 
users["name"] = "SomeName" 
users["stores"] = yourStoreArray 
NSUserDefaults.standardUserDefaults().setObject(users, forKey: "Users") 

类似的东西。

而当你需要得到结构

if let myDictionaryFromUD = userDefaults.objectForKey("Users") as? [String:AnyObject]{ 
    self.users = Users(myDictionaryFromUD["name"], stores: myDictionaryFromUD["stores"] as! [Store]) 

} 

我ASLO假定您将保存到用户的userDefaults阵列。在这种情况下,您将节省[[String: AnyObject]],但机制相同。

+0

商店不只是一个数组,但它有一个嵌套的字典呢? – GarySabo

+0

@PSUSabes在我的例子中商店是一个数组。我的例子是基于你的问题和商店是你的情况下存储结构的数组。它也可以是词典。 –

0

我不知道,这是做到这一点的最好办法,但你可以试试这个。

struct Users { 
     var name: String = "" 
     var stores: [Store] 
    } 

    struct Store { 
     var name: String = "" 

     var clothingSizes = [String : String]() 

    } 

var Advert = [Users]() 

init() { 
     NSUserDefaults.standardUserDefaults().setObject(Advert[0].name, forKey: "NameYouWant") 
}