как конвертировать данные в Int в Swift - PullRequest
0 голосов
/ 30 июня 2018

Я кодирую в Swift. API возвращает данные, которые необходимо преобразовать в Int! что мне делать?

ответ, который мне нужен, выглядит следующим образом: *

12345

но я думаю, что при печати данных:

Необязательно (5 байт)

API возвращает Int (не JSON)

//send HTTP req to register user
        let myUrl = URL(string: "http://app.avatejaratsaba1.com/api/Person/Create")
        var request = URLRequest(url: myUrl!)
        request.httpMethod = "POST" // compose a query string
        request.addValue("application/json", forHTTPHeaderField: "content-type")
        request.addValue("application/json", forHTTPHeaderField: "Accept")

        let postString = ["name" : name.text!,
                          "isLegal" : FinalLegalSegment,
                          "codeMelli" : National_ID.text! ] as [String : Any]


do {
            request.httpBody = try JSONSerialization.data(withJSONObject: postString, options: .prettyPrinted)
        }catch let error {
            print(error.localizedDescription)
            self.DisplayMessage(UserMessage: "1Something went wrong , please try again!")
            return
        }

        let task = URLSession.shared.dataTask(with: request)
        {
            (data : Data? , response : URLResponse? , error : Error?) in

            self.removeActivtyIndicator(activityIndicator: MyActivityIndicator)

            if error != nil
            {
                self.DisplayMessage(UserMessage: "2Could not successfully perform this request , please try again later.")
                print("error = \(String(describing : error))")
                return
            }
            else
            {

                print("////////////////////////////////")
                print("data has been sent")

            }
        }



        task.resume()

Ответы [ 4 ]

0 голосов
/ 17 декабря 2018

попробуйте это:

let intValue: Int = yourData.withUnsafeBytes { $0.pointee }

withUnsafeBytes { $0.pointee } вернет универсальный тип, вы можете привести его к известному типу.

0 голосов
/ 30 июня 2018

сначала преобразуйте ваши данные в строку как blow, а затем используйте эту строку для инициализации int

let stringInt = String.init(data: yourdata, encoding: String.Encoding.utf8)
let int = Int.init(stringInt)

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

0 голосов
/ 30 июня 2018

let dataString = data.data (используя: .utf8, allowLossyConversion: false) .debugDescription dataInt = (Int) (dataString)

0 голосов
/ 30 июня 2018

Как я уже писал в своем комментарии, ваш сервер отправляет текстовое представление целого числа.

Вам нужно написать что-то вроде этого:

if error != nil
{
    //...
    return
}
else
{
    if let data = data {
        //First convert the data into String
        if let text = String(data: data, encoding: .utf8) {
            //And then into Int
            if let value = Int(text) {
                print(value)
                //... use the value
            } else {
                print("text cannot be converted to Int")
            }
        } else {
            print("data is not in UTF-8")
        }
    } else {
        print("data == nil")
    }
}

Код выше может быть проще, если вам не нужны print с.


Используя guard, как предложил Martin R, приведенный выше код выглядит примерно так:

    guard let data = data else {
        print("data == nil")
        return
    }
    guard let text = String(data: data, encoding: .utf8) else {
        print("data is not in UTF-8")
        return
    }
    guard let value = Int(text) else {
        print("text cannot be converted to Int")
        return
    }
    print(value)
    //... use the value

Вы можете избежать глубоко вложенного кода, используя guard. (Вы можете использовать guard для проверки error != nil, но я оставлю это для вас.)

...