如何将以下代码从 Swift 2 转换为 Swift 5?

Posted

技术标签:

【中文标题】如何将以下代码从 Swift 2 转换为 Swift 5?【英文标题】:How can I translate the following code from Swift 2 to Swift 5? 【发布时间】:2019-09-21 10:14:57 【问题描述】:

我相信下面的代码是用 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()

【问题讨论】:

如果您在某处找到此代码,请查找新示例/教程。 Swift 3 或更高版本中的代码更容易更新。 【参考方案1】:
    不要使用NSMutableURLRequest。使用URLRequest。 不要使用NSString,使用String。 查看URLSession 文档,发现您需要shared,而不是sharedInstance()data(using .utf8)。 许多其他修复。

这是您的固定代码,在完成处理程序中可以更好地处理选项:

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()

【讨论】:

以上是关于如何将以下代码从 Swift 2 转换为 Swift 5?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 1.2 到 Swift 2:无法将类型的值转换为预期的参数类型

Swift - 转换为绝对值

将UILabel子类从Objective-C转换为Swift

如何将字符串转换为 CLLocationDegrees Swift 2

Alamofire 的 Swift 扩展方法返回 SwiftyJSON 结果

如何将代码 AVFoundation 目标 c 转换为 Swift?