首页 > 解决方案 > 无法在 Swift 中访问可编码的结构值

问题描述

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

我对此并不陌生,我认为理想的方法是“在获取时,将该数据存储到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)
  }
}

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

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

标签: iosswiftstructcodable

解决方案


我想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 _ {
   }
  }
}

像这样在任何你想要的地方使用而不使用coreDataUserDefaults

class AnotherClass{
 func anotherClassFunc(){
 //use if let or guard let
  if let user = FetchingClass.user{
  print(user.name)
 }
 //or
 if let FetchingClass.user != nil {
  print(FetchingClass.name)
  }
 }
}

推荐阅读