这很容易,我只是遗漏了一些东西。我的应用程序中有一个函数,它发布到服务器,获取响应,并将响应转换为NSDictionary
,然后将NSDictionary
中的一个值集转换为{{1} }}。我需要在创建它们的函数范围之外访问此数组中的值。如果在特定函数中创建了json响应,我该怎样才能将json响应提供给我的整个应用程序?谢谢!
答案 0 :(得分:1)
有几种方法可以做到这一点,其中一种是,如@GoodSp33d所述, NSUserDefaults 另一种方式是使用完成处理程序,如果你愿意使用单身人士,这也是一个选择。
// settings
var jo : [NSObject : AnyObject] = [
"a" : "1.0",
"b" : "2.0"
]
// store your value
userDefaults.setObject(jo, forKey: akey)
// optionally synchronize
var isOk = userDefaults.synchronize()
// safely retrieve your value
if let data0 = userDefaults.dictionaryForKey(akey) {
print(data0)
} else {
print("not set")
}
注意:此方法实际上会将数据持久保存到本地存储中 它可用于多个会话
@diatrevolo补充道: 应该说明NSUserDefaults的一致性目的 并不总是跨平台持久化。 tvOS用户默认值,用于 例如,被系统清除
有一个lot of people,包括我自己,不想使用这种方法,但其他人认为这完全有效。这是单身方法。将您的值设置为此属性会使其在您的应用中全局可用。
struct sharedResult {
static var sharedDict: NSDictionary = nil
}
注意:此方法仅保存会话的数据。
但是,我个人喜欢将HTTP请求包装在一个闭包/完成处理程序中,当我从服务器返回我的对象时,我将它传递给完成处理程序。
// definition
func HTTPConnect(completion: (result: Bool)->()) {
// make http request {
// once you have your result pass it back
completion(result: myResult)
// }
}
// call from where you need the data
HTTPConnect() { (result) -> () in
// do stuff with the result
print(result)
}
注意:此方法根本不保留您的数据。然而,确实如此 您可以轻松地将价值从一个控制器传递到另一个控制器。