swift 4 Alamofire 解析数据并在 UILabel 上显示?

Posted

技术标签:

【中文标题】swift 4 Alamofire 解析数据并在 UILabel 上显示?【英文标题】:swift 4 Alamofire parsing data and show it on UILabel? 【发布时间】:2018-05-10 15:29:29 【问题描述】:

下面是我的代码。 我想利用 Alamofire 来获取下面 url 中的数据并将其解析为几个 UILabel ...... 如何获取数据并将其解析为 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

        

    

【问题讨论】:

用回复编辑您的问题 @Sh_Khan 你是什么意思? 在不知道响应json的情况下我们将如何帮助您 @Sh_Khan 我添加了 Json,但不知道这是不是你想要的 【参考方案1】:

您可以利用 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

【讨论】:

user_id & board_title 应该是字符串【参考方案2】:

另一个选择是将 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.
            

        

【讨论】:

以上是关于swift 4 Alamofire 解析数据并在 UILabel 上显示?的主要内容,如果未能解决你的问题,请参考以下文章

swift 4 使用 Alamofire 解析没有键的 JSON

如何在 Swift 3 中使用 Alamofire 4 解析这个 json?

Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析

使用 swift 4 和 Alamofire 在 UITableView 中显示 JSON 数据 [关闭]

如何在 Alamofire 中上传文件并在参数中传递数据 - swift 5

Swift - Alamofire源码解析