swift 处理来自URLSession.shared.uploadTask的响应

e4yzc0pl  于 2022-11-28  发布在  Swift
关注(0)|答案(1)|浏览(155)

我创建了一个上传任务,它工作得很好,我确实从我的PHP文件中得到了正确的响应。
但不知何故,我在使用收到的数据响应时遇到了麻烦。
我期望返回的字符串是“7”,但实际上我得到了“7\n”。而且我甚至不能拆分字符串以将“7\n”转换为int16 7。

func validateUser(user: User) {
    (...)
        let url = URL(string: "exampleURL")
        var request = URLRequest(url: url!)
        request.httpMethod = "POST"
        request.setValue("text/html", forHTTPHeaderField: "Content-Type")
        
        let task = URLSession.shared.uploadTask(with: request, from: jsonData) { data, response, error in
            if let error = error {
                print ("error: \(error)")
                return
            }
            guard let response = response as? HTTPURLResponse,
                  (200...299).contains(response.statusCode) else {
                print ("server error")
                return
            }

            if let mimeType = response.mimeType,
                let data = data,
                let dataString = String(data: data, encoding: .utf8) {
                print ("got data: \(dataString)")   // "7\n"
                self.globalUserID = Int16(dataString) ?? 0      // always 0

                
                // proceed with usage of response
                }
        }
        task.resume()
    }

我也不太理解函数完成后如何处理返回值,所以我尝试在函数内部直接使用它(写入self.globalUserID)
任何帮助都将不胜感激

c0vxltue

c0vxltue1#

我想我找到了一个办法

print("String before: \(dataString)")  // "String before: 7\n"
let ID = Int16(dataString.components(separatedBy: .whitespacesAndNewlines).joined())
print("String after: = \(ID)")  // ID = Optional(7)

ID仍然是可选的,但到目前为止还不错:)

相关问题