如何将以下代码从 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:无法将类型的值转换为预期的参数类型
将UILabel子类从Objective-C转换为Swift
如何将字符串转换为 CLLocationDegrees Swift 2