这必须很容易,我只是想念一些东西。我的应用程序中有一个函数,该函数将发布到服务器,获取响应并将该响应转换为NSDictionary
,然后将该NSDictionary
中的值集之一转换为NSArray
。我需要在创建它们的函数范围之外访问此数组中的值。如果是在特定函数中创建的,我如何使JSON响应可用于整个应用程序?谢谢!
最佳答案
有几种方法可以执行此操作,如@GoodSp33d所述,其中一种是NSUserDefaults,另一种方法是使用完成处理程序,如果您愿意使用单例,那么也可以选择这样做。
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")
}
(source: Martin R)
注意:此方法实际上将数据持久保存到本地存储中
跨多个会话可用
@diatrevolo添加了:
为了保持一致性,应声明NSUserDefaults为
并非始终跨平台持久化。 tvOS用户默认设置
例如,被系统清除
单例法
有一个lot of people,包括我自己在内,不愿意使用这种方法,但其他人则认为这完全有效。这是单例方法。将您的值设置为此属性可使其在您的应用程序中全局可用。
struct sharedResult {
static var sharedDict: NSDictionary = nil
}
(more singleton approaches)
注意:此方法仅保存会话的数据。
完成处理程序
但是,我个人喜欢将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)
}
注意:此方法根本不保存您的数据。它确实可以做到
您可以轻松地将价值从一个控制器传递给另一个控制器。
关于ios - 如何在整个应用程序中访问在函数中创建的json数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34592412/