Как взять результат функции и превратить его в массив пар ключ-значение - PullRequest
0 голосов
/ 26 февраля 2020

Я довольно новичок в Swift, но у меня есть функция, которая возвращает результат пары ключ-значение чисел

func dataPostRequest(_ url:String,_ paramString:String)
{
    let url:NSURL = NSURL(string: url)!
    let session = URLSession.shared

    let request = NSMutableURLRequest(url: url as URL)
    request.httpMethod = "POST"

    request.httpBody = paramString.data(using: String.Encoding.utf8)

    let task = session.dataTask(with: request as URLRequest) {
        (
        data, response, error) in

        guard let _:NSData = data as NSData?, let _:URLResponse = response, error == nil else {
            print("error")
            return
        }

        if let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
        {
            print(dataString)


        }
    }

    task.resume()

}

Я могу вызвать функцию следующим образом:

dataPostRequest("https://myserver.com/","user_email=emailtest.com")

Это работает правильно, но теперь я хочу использовать данные, которые я извлек, и отобразить их в виде таблицы. Мой tableView настроен правильно, но мне интересно, как я могу взять свою функцию и превратить ее в массив пар ключ-значение или словарь, который я могу использовать. Я попытался создать пустой словарь и установить для него свой вызов функции, но я получаю сообщение об ошибке:

var emptyDictionary = [Int: Int]()

emptyDictionary = dataPostRequest("https://myserver.com/","user_email=emailtest.com")

И независимо от того, какой вариант я пробую, я получаю:

Cannot assign value of type '()' to type '[Int : Int]' 

Любой Руководство будет с благодарностью.

1 Ответ

1 голос
/ 26 февраля 2020

dataPostRequest не имеет возвращаемого значения (он же ()). Вы можете декодировать полученные данные в обработчике завершения и назначить их в словарь. См. Строку комментария ниже.

Если вам нужно перейти к другой функции, вам нужно добавить обработчик завершения, описанный здесь .

В основном не используйте NS... классы в Swift вообще есть, если есть родные аналоги. И не аннотируйте типы, которые может выводить компилятор.

Родная версия Swift -

func dataPostRequest(with url:String, paramString : String)
{
    let url = URL(string: url)!
    let session = URLSession.shared

    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    request.httpBody = paramString.data(using: .utf8)

    let task = session.dataTask(with: request) { data, response, error in

        if let error = error {
            print(error)
            return
        }

        let dataString = String(data: data!, encoding: .utf8)!
        print(dataString)

        // here decode the data to the desired type and assign it to emptyDictionary
    }

    task.resume()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...