首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获得此错误: nw_protocol_get_quic_image_block_invoke dlopen libquic失败

获得此错误: nw_protocol_get_quic_image_block_invoke dlopen libquic失败
EN

Stack Overflow用户
提问于 2020-10-12 17:46:40
回答 2查看 6.4K关注 0票数 13

我试图连接我的API数据,以便在单元格中查看它,但是我似乎无法获得响应,而且总是== nil,下面的代码描述了Country.SWIFT // Model.SWIFT // Response.SWIFT,它显示了如何使用可编码获得JSON响应,而CountryCell.SWIFT展示了如何使用它来调用API映像的链接:

Country.SWIFT

代码语言:javascript
运行
复制
struct Country: Decodable {
    
    var CountryName = ""
    var CountryImage = ""
    var objectId = ""


// MARK: - Coding Keys
enum CodingKeys: String, CodingKey {
    case CountryName = "CountryName"
    case CountryImage = "CountryImage"
    case objectId = "objectId"
}

//MARK: - Json Decoder

init(from decoder: Decoder) throws {
    
    let container = try decoder.container(keyedBy: CodingKeys.self)
    // Parsing our attributes
    self.CountryName = try container.decode(String.self, forKey: .CountryName)
    self.CountryImage = try container.decode(String.self, forKey: .CountryImage)
    self.objectId = try container.decode(String.self, forKey: .objectId)

}

}]

Model.SWIFT

代码语言:javascript
运行
复制
protocol ModelDelegate {
    
    func countriesFetched (_ countries: [Country])
    
}

class Model {
    
    //MARK: - Vars
    var delegate: ModelDelegate?
    
    // MARK: - Get Countries
    func getCountries () {
        // URL Object
        let url = URL(string: Constants.API_URL)
        guard url != nil else {return}
        
        // URL Session object
        let session = URLSession.shared
        
        //Data Task from URLSession object
        
        let dataTask = session.dataTask(with: url!) { (data, response, error) in
            
            if error != nil || data == nil {
                print(error!.localizedDescription)
                return
            }
            print(data!)
            
            do {
                let decoder = JSONDecoder()
                let response = try decoder.decode(Response.self, from: data!)
                
                if response.items != nil {
                    
                    DispatchQueue.main.async {
                        self.delegate?.countriesFetched(response.items!)
                    }
                  
                }
            }
            catch {
                
            }
        }
        
        // start data task
        dataTask.resume()
    }
}

Response.SWIFT

代码语言:javascript
运行
复制
 struct Response: Decodable {

    var items: [Country]? = []
    init(from decoder: Decoder) throws {
        var itemsContrainer = try decoder.unkeyedContainer()
        self.items = try itemsContrainer.decode([Country].self)
        
    }
    
    
}

CountryCell.SWIFT

代码语言:javascript
运行
复制
class CountryCell: UICollectionViewCell {
    
    //MARK: - Vars
    var country: Country?
    
    //MARK: - Outlets
    @IBOutlet weak var imageViewCountryOutlet: UIImageView!
    @IBOutlet weak var lblCountryNameOutlet: UILabel!
    
    //MARK: - Creating Cell

    func generateCell (_ myCountry: Country) {
        self.country = myCountry
        
        guard self.country != nil else {  return }
        lblCountryNameOutlet.text = country!.CountryName
        
        guard self.country!.CountryImage != "" else {return}
        
        let url = URL(string: self.country!.CountryImage)
        
        guard url != nil else {return}
  
        let session = URLSession.shared
        
        let dataTask = session.dataTask(with: url!) { (data, response, error) in
            
            if error == nil || data != nil {
                if url!.absoluteString != self.country!.CountryImage {
                    
                    return
                }

                let image = UIImage(data: data!)

                DispatchQueue.main.async {
                    self.imageViewCountryOutlet.image = image
                    
                }
            }
            
        }

        dataTask.resume()
        
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2021-07-03 19:31:31

不需要包装Response类型,直接对国家列表进行解码:

代码语言:javascript
运行
复制
let decoder = JSONDecoder()
let items = try decoder.decode([Country].self, from: data!)

在您的代码中,当您在Response中请求unkeyedContainer时,预期的JSON结构将需要额外的嵌套数组。

检查catch块中的解码错误

代码语言:javascript
运行
复制
do {
...
}
catch {
    print(error)
}
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64322845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档