Json 数据和我创建的类之间不匹配

Posted

技术标签:

【中文标题】Json 数据和我创建的类之间不匹配【英文标题】:Mismatch Between Json data And Classes i've made 【发布时间】:2017-09-03 07:44:25 【问题描述】:

我真的是 swift 新手,没有你们的帮助,我无法前进

谁能告诉我如何解决这个错误?

我把错误的图片放在下面

import UIKit
import Alamofire
import SwiftyJSON

class AppCategory : NSObject 

    var name : String?
    var apps : [App]?
    var type : String?



        override func setValue(_ value: Any?, forKey key: String) 
            if key == "apps " 
                var apps = [App]()
                for dict in value as! [[String:AnyObject]] 
                    let app = App()
                    app.setValuesForKeys(dict)
                    apps.append(app)
                

            else
                super.setValue(value, forKey: key)
            
        
 static func fetchFeaturedApps (completionHandler :  @escaping ([AppCategory]) -> ()) 


        let urlRequest = URLRequest(url:URL(string: "http://www.statsallday.com/appstore/featured")!)

            URLSession.shared.dataTask(with: urlRequest as URLRequest)  (data, response, error) -> Void in

                if error != nil 
                    print(error!)
                    return
                

                do 
                    let json = try( JSONSerialization.jsonObject(with: data!, options: .mutableContainers)) as! [String : Any]

                    var appCategories = [AppCategory]()

                    for dict in json["categories"] as! [[String:Any]]
                        let appcategory = AppCategory()
                        appcategory.setValuesForKeys(dict)
                        appCategories.append(appcategory)
                    
                    DispatchQueue.main.async 
                        completionHandler(appCategories)
                    


                catch let err 
                    print(err)
                



            .resume()

        

这是我的课

class App : NSObject 

    var Id : NSNumber?
    var Name : String?
    var ImageName : String?
    var Category : String?
    var Price : NSNumber?


the JSON link

这是一个应该传回单元格但给我 NSArray 错误不匹配的功能

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! AppCell

            cell.apps = appCategory?.apps?[indexPath.item]

        return cell

    

我不知道如何找出不匹配的类型

【问题讨论】:

请将代码和相关信息以文本形式包含在您的问题中。 【参考方案1】:

第二个错误

检查这一行 if key == "apps " 删除 word 应用程序中的空格

你应该使用这个

 for dict in json["categories"] as! [[String:Any]]

    

// Any 是任何数据类型的别名。 // AnyObject 是从类派生的任何数据类型的别名。

但最好写出来

guard let categories   = json["categories"] as? [[String:Any]] else 
        return
    

    for dict in categories 

    

【讨论】:

现在我收到此错误:致命错误:NSArray 元素无法匹配 Swift 数组元素类型 (lldb) @michealwoods 检查上图你会看到所有数据没有任何问题,只需分享哪里出错 我编辑了我的帖子,现在更清楚了,感谢您的时间 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[ setValue:forUndefinedKey:]:此类不符合键价格的键值编码。”这是新错误 价格是双倍价格请确保您正确处理

以上是关于Json 数据和我创建的类之间不匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?

java中,类走之间可以嵌套吗?

无法运行 Angular 站点,因为我的 angular.json 文件路径与 ng build 创建的不匹配

在 Vue 中为 JSON 数据创建下拉过滤器

如何在json中使用Codable解析数据有键但值与枚举不匹配

r 创建将行标记为在两个数据集之间匹配的列