【发布时间】:2021-05-19 04:50:31
【问题描述】:
我想在TextField 中显示文本并能够对其进行编辑。但是我在绑定它时遇到了问题。这是我的代码:
struct DataView: View {
@ObservedObject private var dataPresenter = DataPresenter()
var body: some View {
VStack {
TextField("Name", text: $dataPresenter.data?.name ?? "") // This is the error
}
.onAppear(perform: {
dataPresenter.getData()
})
}
}
class DataPresenter: ObservableObject {
@Injected private var getDataInteractor: GetDataInteractor
@Injected private var cancellables: Set<AnyCancellable>
@Published var data: GetDataResp?
func getData() {
getDataInteractor.execute()
.sink { error in
print("Error:", error)
} receiveValue: { response in
if response.errorCode == "00" {
print(response)
self.data = response
}
}
.store(in: &cancellables)
}
}
struct GetDataResp: Codable, Equatable {
var name : String?
var address : String?
var email : String?
enum CodingKeys: String, CodingKey {
case name = "name"
case address = "address"
case email = "email"
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
name = try values.decodeIfPresent(String.self, forKey: .name)
address = try values.decodeIfPresent(String.self, forKey: .address)
email = try values.decodeIfPresent(String.self, forKey: .email)
}
}
当我没有在$dataPresenter.data.name ?? "" 中使用? 时,我总是会收到这样的错误:
然后,当我用? 修复它时,我收到更多这样的错误:
我陷入了这个错误循环,使用force unwrap 会使应用程序崩溃。我有比名字更多的变量,所以我不能只在响应中self.name = response.name ?? ""。我该如何解决这个问题?
任何建议将不胜感激。
【问题讨论】:
标签: ios swiftui binding textfield optional