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 数据 [关闭]