Как я могу перевести следующий код из Swift 2 в Swift 5? - PullRequest
0 голосов
/ 02 мая 2019

Я полагаю, что следующий код, написанный ниже, написан на 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()

1 Ответ

2 голосов
/ 03 мая 2019
  1. Не используйте NSMutableURLRequest.Используйте URLRequest.
  2. Не используйте NSString, используйте String.
  3. Просмотрите документацию URLSession и убедитесь, что вам нужен shared, а не sharedInstance().
  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()
...