ios - 无法在 Swift 中访问可编码的结构值
问题描述
我正在从服务中以 json 格式获取用户数据并解码为 Codable User 结构。我可以访问已获取响应的属性,但我想在其他地方访问该 User 结构属性,比如说在另一个类、函数等中。
我对此并不陌生,我认为理想的方法是“在获取时,将该数据存储到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)
}
}
我在某些函数中访问结构的错误方式是-
UserInfo.CodingKeys.name.rawValue
//Output is the key string - 'Name'
解决方案
我想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
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)
}
}
}
推荐阅读
- javascript - 从一个类型类数组Angular 7的数组中访问数据
- oracle - 根据 Oracle 中的百分比计算更新多个列
- c++ - 如何从二进制文件中读取字符串?
- c++ - 何时将局部变量声明为非静态 constexpr 有益/必需?
- javascript - 设置以动态形式打开的第一个字段
- python - Python对象创建具有3个聚合关系成员的组
- php - Livewire Laravel - TypeError:无法读取 null 的属性“getAttributeNames”
- javascript - 有人可以解释我试图比较 2 个数组的代码有什么问题吗?
- python - ASN.1标签含义
- api - OpenAPI 3 - 如何用模式中允许的键值属性描述数组?