我正在从服务中获取用户数据作为json并将其解码为Codable User结构。我可以在获取响应的地方访问该属性,但是我想在其他地方访问该User struct属性,比如在另一个类,函数等中。
我对此并不陌生,我认为理想的方法是“在获取数据时,将数据存储到Core Data
或User 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'
答案 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