无法在Swift中访问可编码的结构值

时间:2018-10-05 04:06:37

标签: ios swift struct codable

我正在从服务中获取用户数据作为json并将其解码为Codable User结构。我可以在获取响应的地方访问该属性,但是我想在其他地方访问该User struct属性,比如在另一个类,函数等中。

我对此并不陌生,我认为理想的方法是“在获取数据时,将数据存储到Core DataUser Defaults中,然后相应地更新我的视图。” >

请提出最好的方法和适当的方法,或者是否有任何直接访问可编码结构值的方法。

这是我的可编码结构-

struct User: Codable {
let name : String?

enum CodingKeys: String, CodingKey {
    case name = "Name"
}

init(from decoder: Decoder) throws {
    let values = try decoder.container(keyedBy: CodingKeys.self)
    name = try values.decodeIfPresent(String.self, forKey: .name)
  }
}

我在某些函数中访问struct的错误方式是-

UserInfo.CodingKeys.name.rawValue
//Output is the key string - 'Name'

2 个答案:

答案 0 :(得分:0)

您可以尝试使用单例引用

struct User: Codable {

    let name : String?

    enum CodingKeys: String, CodingKey {
        case name = "Name"
    }

    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        name = try values.decodeIfPresent(String.self, forKey: .name)
        User.shared = self
    }
}

创建另一个保存引用的类。的User

final class AppGlobalManager  {
       static let sharedInstance = AppGlobalManager()

       var currentUser: User? // Initialise it when user logged in   

       private init()

}

然后您可以按以下方式访问任何用户数据

AppGlobalManager.sharedInstance.currentUser.name

答案 1 :(得分:0)

我认为distance_so_far可以帮助您

static

假设在这里获取数据

struct User: Codable {
 let name : String?

 private enum CodingKeys: String, CodingKey {
  case name = "Name"
 }
}

无需使用class FetchingClass{ static var user: User? func fetchData(){ //After Url request success do { //assign directly to static varibale user FetchingClass.user = try JSONDecoder().decode(User.self, from: data) } catch _ { } } } coreData即可在任意位置使用这样的

UserDefaults