swift 4 Анализ паролей Alamofire и показ их на UILabel? - PullRequest
0 голосов
/ 10 мая 2018

Вот мой код ниже. Я хочу использовать Alamofire, чтобы получить данные в URL ниже и разобрать их в несколько UILabels ... Как я могу получить данные и проанализировать их в UILabel? Пожалуйста, помогите мне .... (данные в URL приведены в формате JSON)

"//(code 200)
{
    ""message"": ""Successful Get Board Data"",
    ""data"": [
    {
        ""board_idx"": 2,
        ""board_title"": ""testing"",
        ""board_content"": ""testing"",
        ""board_views"": 0,
        ""board_photo"": null,
        ""board_writetime"": ""2018-04-27 15:04:03"",
        ""user_id"": ""ㅇㅇ""
        }

    ]
}"          
    func showDetail(title: String, content: String, comment: String) {
    let URL = "http://______________/board"
    let body: [String: Any] = [
        "user_id" : gsno(userdefault.string(forKey: "nickName")),
        "board_title" : title,
        "board_content" : content,
        "comment_content" : comment
    ]
    Alamofire.request(URL, method: .get, parameters: body, encoding: JSONEncoding.default, headers: nil).responseData() { res in
        switch res.result {
        case .success:


            break
        case .failure(let err):
            print(err.localizedDescription)
            break

        }

    }
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Другим вариантом является соединение Alamofire с SwiftyJSON, что, на мой взгляд, действительно помогает, когда дело доходит до обработки данных JSON. Он преобразует данные Alamofire в работоспособный формат и позволяет действительно легко анализировать данные.

https://github.com/SwiftyJSON/SwiftyJSON

Пример использования:

    Alamofire.request("http://samplesite.com/api/data.php", method: .post, parameters: someJSONIfNeeded, encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in
            switch(response.result) {
            case .success(let responseJSON):
                let recievedJson = JSON (responseJSON) //Use SwiftyJSON to convert the received data
//Parse the data using the SwiftyJSON functions, and add the needed data to labels.
                completion (true, nil) //Return true if the function succeeds.
            case .failure(let error):
                print(error)
                completion (false, error)//Return false if the function fails.
            }

        }
0 голосов
/ 10 мая 2018

Вы можете использовать Swift Decodeables, чтобы получить данные из ответа и превратить их в объект, из которого вы можете заполнить метку.

struct BoardData: Decodable {
    var message: String
    var data: [BoardInfo]
}

struct BoardInfo: Decodable {
   var board_idx: Int?
   var board_title: String?
   var board_content: String?
   var board_views: Int?
   var board_writetime: String?
   var user_id: String?
}

С этим вы можете затем проанализировать ответ непосредственно из Alamofire,в вашем

case .success:  

т.е.

let json = res.data
    do{
        let boardResponse = try JSONDecoder().decode(BoardData.self,from: json!)     
        boardTitleLabel.text = boardResponse.data[0].board_title
     }catch {
       print("Error: \(error)")
     }

Если какой-либо из типов неверен, т.е. user_id выглядит как строка в вашем JSON, но я бы предположил, что это Int, измените их вDecodable, представленный выше, и вам будет хорошо.

Если вы хотите дать переменным более стандартные имена, например, boardTitle, а не board_title, взгляните на CodingKeys, так как это позволит вам указать сериализованныйимена.

https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

...