2015-06-04 41 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") 
}