微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI表单未提交给api

如何解决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 举报,一经查实,本站将立刻删除。