如何解决SwiftUI表单未提交给api
我正在测试使用表单将数据提交到测试API的过程,并且除最后一段代码外,其他所有内容都起作用,这将触发我的打印字符串“结尾错误”
这是我的Codable课程:
class Submission: ObservableObject,Codable {
enum CodingKeys: String,CodingKey {
case fieldOne,fieldTwo,fieldThree,fieldFour,fieldFive,notes
}
var didChange = PassthroughSubject<Void,Never>()
var fieldOne = false { didSet { update() } }
var fieldTwo = false { didSet { update() } }
var fieldThree = false { didSet { update() } }
var fieldFour = false { didSet { update() } }
var fieldFive = false { didSet { update() } }
var notes = "" { didSet { update() } }
var submit = false
var isValid: Bool {
if notes.isEmpty {
return false
}
return true
}
func update() {
didChange.send(())
}
}
这是我的表单结构:
struct PostCallForm: View {
@Observedobject var submission = Submission()
@State var confirmationMessage = ""
@State var showingConfirmation = false
var body: some View {
NavigationView {
Form {
Toggle(isOn: $submission.fieldOne ) {
Text("Field One")
}
Toggle(isOn: $submission.fieldTwo ) {
Text("Field Two")
}
Toggle(isOn: $submission.fieldThree ) {
Text("Field Three")
}
Toggle(isOn: $submission.fieldFour ) {
Text("Field Four")
}
Toggle(isOn: $submission.fieldFive ) {
Text("Field Five")
}
Section(header: Text("Header")) {
TextField("Please leave some notes.",text: $submission.notes)
}
Section {
Button(action: {
self.placeSubmission()
}){
Text("Submit")
}
}.disabled(!submission.isValid)
}.navigationBarHidden(true).navigationBarTitle("Title")
.alert(isPresented: $showingConfirmation) {
Alert(title: Text("AlertTitle"),message: Text("Test Alert"),dismissButton: .default(Text("dismiss alert")))
}
}
}
func placeSubmission() {
guard let encoded = try? JSONEncoder().encode(submission) else {
print("Failed")
return
}
let url = URL(string: "https://reqres.in/api/test")!
var request = URLRequest(url: url)
request.setValue("appilcation/json",forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
request.httpBody = encoded
URLSession.shared.dataTask(with: request) { (data,response,error) in
guard let data = data else {
print("no data in response")
return
}
if let decodedSubmission = try? JSONDecoder().decode(Submission.self,from: data) {
self.confirmationMessage = "Confirmation Message Worked!"
self.showingConfirmation = true
} else {
print("error at end") // this is what is triggered
}
}.resume()
}
}
很困,无法弄清楚我要去哪里,显然我的URL.shared.dataTask的编码中存在某种错误,但我不知道这是什么吗?任何方向都很感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。