ios - 使用 JSONDecoder 后如何正确调用属性
<p><p>我正在解码 JSON,然后我创建了一个 completionHandler 函数,以便能够在项目中的任何位置获取 JSON 解析的属性。但是,当我调用该函数并只打印我想要的属性时,我将它们全部放在一起而不是调用的属性。 </p>
<p>例如:我调用 beer.name,所以当我打印出来时,我得到了解码后的 Struct 中包含的所有属性和值。我究竟做错了什么?我需要将这些值分开,以便能够填充 UITableView 和其他组件。</p>
<p><strong><em> ViewController </em></strong></p>
<pre><code> override func viewDidLoad() {
super.viewDidLoad()
getApiData { (cerveja) in
for beer in cerveja {
print(beer.name!)
}
}
}
</code></pre>
<blockquote>
<p>That's what I got for this call below:</p>
</blockquote>
<pre><code>
</code></pre>
<p><em>我确实需要的是所有名称或 abv 或 image_url 的</em> </p>
<p><strong><em>模型文件夹:</em></strong></p>
<pre><code>struct Cerveja:Decodable{
let name:String?
let abv:Double
let image_url:String
}
</code></pre>
<p><strong><em>网络文件夹:</em></strong></p>
<pre><code>func getApiData(completion: @escaping () -> ()){
guard let urlString = URL(string: "https://api.punkapi.com/v2/beers") else {
print("URL Error")
return
}
Alamofire.request(urlString).responseJSON { response in
if response.data == response.data{
do{
let decoder = try JSONDecoder().decode(.self, from: response.data!)
print(decoder)
}catch{
print(error)
}
}else{print("API Response is Empty")}
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>实际上,您正在打印“解码器”。你必须这样写:</p>
<pre><code>func getApiData(completion: @escaping () -> ()){
guard let urlString = URL(string: "https://api.punkapi.com/v2/beers") else {
print("URL Error")
return
}
Alamofire.request(urlString).responseJSON { response in
if let data = response.data{
do{
let decoder = try JSONDecoder().decode(.self, from: data)
completion(decoder)
}catch{
print(error)
}
}else{print("API Response is Empty")}
}
</code></pre>
<p>}</p>
<p>避免你强制解包。所以用</p>
<pre><code>if let data = response.data{
// Some code
}
</code></pre>
<p>然后就可以在viewDidLoad()中打印了</p>
<pre><code> override func viewDidLoad() {
super.viewDidLoad()
getApiData { (cerveja) in
for beer in cerveja {
print(beer.name!)
}
}
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 使用 JSONDecoder 后如何正确调用属性,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/51387145/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/51387145/
</a>
</p>
页:
[1]