如何将以下代码从 Swift 2 翻译成 Swift 5?

How can I translate the following code from Swift 2 to Swift 5?

提问人: 提问时间:5/3/2019 最后编辑:Dávid Pásztor 更新时间:5/3/2019 访问量:193

问:

我相信下面的代码是用 Swift 2 编写的。如何将语法转换为最新的 Swift (5)?

使用 Xcode 进行转换时,它给我留下了如下错误:

调用中的额外参数“usingEncoding”

无法调用非函数类型“URLSession”的值

原始(需要帮助转换):

let request = NSMutableURLRequest(URL: NSURL(string: "http://www.sample.com/sample.php")!)
        request.HTTPMethod = "POST"

        let postString = "a=\(customerLabel!)"
        request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in

            if error != nil {
                print("error=\(error)")
                return
            }

            print("response = \(response)")

            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("responseString = \(responseString)")
        }
        task.resume()
    }

这是我的尝试,但它有错误:

let request = NSMutableURLRequest(url: URL(string: "http://www.sample.com/sample.php")!)
request.httpMethod = "POST"
let postString = "a=\(customerLabel!)"
request.HTTPBody = postString.data(usingEncoding: NSUTF8StringEncoding)

let task = URLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in

    if error != nil {
        print("error=\(error)")
        return
    }

    print("response = \(response)")

    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
    print("responseString = \(responseString)")
}
task.resume()
斯威夫特 swift2 swift5

评论

3赞 rmaddy 5/3/2019
如果您在某处找到此代码,请查找新的示例/教程。Swift 3 或更高版本中的代码更新起来要容易得多。

答:

2赞 rmaddy 5/3/2019 #1
  1. 不要使用 .用。NSMutableURLRequestURLRequest
  2. 不要使用,使用.NSStringString
  3. 查看文档,发现您需要 ,而不是 .URLSessionsharedsharedInstance()
  4. data(using .utf8).
  5. 还有很多其他修复。

下面是你的固定代码,其中更好地处理了完成处理程序中的可选参数:

var request = URLRequest(url: URL(string: "http://www.sample.com/sample.php")!)
request.httpMethod = "POST"
let postString = "a=\(customerLabel!)"
request.httpBody = postString.data(using: .utf8)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let error = error {
        print("error=\(error)")
        return
    }

    print("response = \(response)")

    if let data = data, let responseString = String(data: data, encoding: .utf8) {
        print("responseString = \(responseString)")
    }
}
task.resume()