objective-c - 如何从 firebase 数据库读取一小节

标签 objective-c swift firebase firebase-realtime-database

我正在使用此代码访问 Firebase 数据库,但我无法弄清楚如何读取字符串子数组。 (JSON 结构如下))。我的代码返回顶级项目,但不返回字符串列表。有人可以帮助解决这个问题吗?

这是我从数据库读取的函数:

func sizes(userId: String = Auth.auth().currentUser!.uid, success: @escaping ([Sizes]) -> ()) {
        let ref = Router.sizes.reference()
        let query = ref.queryOrdered(byChild: "name")   //userId)
        query.observe(.value, with: { snapshot in
            var array = [Sizes]()
            for child in snapshot.children {
                if let size = Mapper<Sizes>().map(JSON: (child as! DataSnapshot).value as! [String : AnyObject]) {
                    array.append(size)
                }
            }
            success(array)
        })
    }

我的 Firebase JSON 如下:

{
  "-SzCat_001": {
   "name": "Womans",
    "sizeCategories": {
      "name": "Pants",
      "sizeDescriptor": [
        "00",
        "0",
        "2",
        "4",
        "6",
        "8",
        "10",
        "12",
        "XL"
      ]
    }
  }
}

这就是我得到的返回?

[0] = { name = "Womans" sizeCategories = 0 values {} }

我正在尝试弄清楚如何将字符串的 sizeCategories 列表读取为大小的子数组。

这是我对尺寸和尺寸类别的定义:

struct Sizes: Mappable {

    var name: String = ""
    var sizeCategories = [SizeCategories]()

    init() {
    }

    init?(map: Map) {
    }

    mutating func mapping(map: Map) {
        name <- map["name"]
        sizeCategories <- map["sizeCategories"]
    }
}

struct SizeCategories: Mappable {

    var name: String = ""
    var sizeDescriptor = [String]()

    init() {
    }

    init?(map: Map) {
    }

    mutating func mapping(map: Map) {
        name <- map["name"]
        sizeDescriptor <- map["sizeDescriptor"]
    }
}

感谢您的帮助!!!

最佳答案

为了读取这里的数据,您需要经历很多困难。你可以只是 let allMyData = snapshot.value as! [String: AnyObject]并且知道每个内部值也是 [String: AnyObject] 。但如果你真的想用这种映射技术解构成更多类型的东西,看看你的 sizes定义:

var sizeCategories = [SizeCategories]()

这表示“sizeCategories 是 SizeCategories 类型的数组”。但您的数据不是结构化为数组,而是一个字典:

"sizeCategories": {
  "name": "Pants",
  "sizeDescriptor": [
    "00",
    "0",
    "2",
    "4",
    "6",
    "8",
    "10",
    "12",
    "XL"
  ]
}

您需要在此处调整该字段的定义和映射方法。

关于objective-c - 如何从 firebase 数据库读取一小节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47085733/

相关文章:

ios - 如何更新 CoreData 中另一个实体的子实体

ios - 解析我的 SWIFT 字典

FirebaseAuth : getGoogleApiForMethod() returned Gms: com. google.firebase.auth.api.internal.zzal@489

swift - 为什么我需要将属性强制转换为与该属性具有相同签名的泛型方法?

swift - 使用参数以编程方式创建 TableView - swift

ios - 控制iOS 13模态呈现的高度

swift - 如何在不同类中共享数据

objective-c - 重复符号 : Include static lib A in static lib B, 还包括 XCode 项目中的库 A 和 B

objective-c - 如何在另一台Mac上运行未签名的cocoa应用程序构建?

objective-c - AVAudioUnit(渲染)回调