ios - 如果它们是通过加载 .json 数据进行初始化的,如何在 init() 中初始化变量?
问题描述
我有一个结构 PrimaryUser(),其变量通过 .json 文件解析器加载。其中一个变量是 ISO8601 格式的日期字符串。我希望将该值自动转换为 Date 类型变量。
我面临的问题是我不知道如何使此代码在创建 PrimaryUser() 时自动运行:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
self.dateOfBirth = dateFormatter.date(from: dateOfBirthISO8601)!
如果我将此代码放入 init() 中,则会收到错误消息:
'self' used before all stored properties are initialized
如果我尝试将 dateOfBirth 设为惰性变量,则会遇到此错误:
Lazy properties must have an initializer
再次重申,所有 PrimaryUser() 变量都将通过与 PrimaryUser() 完全分离的解析器使用 .json 文件中的数据进行初始化。所以在 PrimaryUser() 中初始化变量是没有意义的。
PrimaryUser() 如下所示:
import Foundation
import SwiftUI
struct PrimaryUser: User, Hashable, Codable, Identifiable {
var id: Int
var firstName: String
var lastName: String
var dateOfBirthISO8601: String
lazy var dateOfBirth: Date
init() {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
self.dateOfBirth = dateFormatter.date(from: dateOfBirthISO8601)!
}
}
解决方案
你可以像这样发起懒惰
struct PrimaryUser: Hashable, Codable, Identifiable {
var id: Int
var firstName: String
var lastName: String
var dateOfBirthISO8601: String
lazy var dateOfBirth: Date? = {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
let date = dateFormatter.date(from: dateOfBirthISO8601)
return date
}()
}
推荐阅读
- python - ImportError:libnvidia-fatbinaryloader.so.396.24.02:无法打开共享对象文件:没有这样的文件或目录
- r - 分组词频
- ruby-on-rails - 我有推送到heroku的问题
- javascript - 基于所选/活动对象显示控件未按预期工作
- javascript - popup not working via javascript cookies - updated code
- java - How to pass Rest post call inputs
- java - 即使文件在工作目录中,也无法从 java 中读取文件
- ios - 尝试使用 SnapKit 在自定义 UITableViewCell 中布局 UILabel 时收到警告
- c# - ElasticSearch sorting term aggregation buckets
- git - 使用 Git 修正合并冲突