如何在我的应用程序中访问函数中创建的json数组?

时间:2016-01-04 13:36:28

标签: ios json swift

这很容易,我只是遗漏了一些东西。我的应用程序中有一个函数,它发布到服务器,获取响应,并将响应转换为NSDictionary,然后将NSDictionary中的一个值集转换为{{1} }}。我需要在创建它们的函数范围之外访问此数组中的值。如果在特定函数中创建了json响应,我该怎样才能将json响应提供给我的整个应用程序?谢谢!

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点,其中一种是,如@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)
}
  

注意:此方法根本不保留您的数据。然而,确实如此   您可以轻松地将价值从一个控制器传递到另一个控制器。