这必须很容易,我只是想念一些东西。我的应用程序中有一个函数,该函数将发布到服务器,获取响应并将该响应转换为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/

10-12 14:46
查看更多