【问题标题】:Accessing mapped object in AlamoFire framework returns nil value在 AlamoFire 框架中访问映射对象返回 nil 值
【发布时间】:2018-03-24 01:21:01
【问题描述】:

我正在使用基于 Alamofire 框架构建的 Swift Wrapper,通过它的 graphQL API 从 Yelp 返回业务数据。该调用返回一个 JSON 对象,然后将其映射到“CDYelpBusiness”类型的对象中,并且我可以访问它的所有属性(保存几个小时),其类型为 [CDYelpHour]?。它总是返回 nil,我确信这是由于我的误解,但我不确定是什么。这是我的电话:

    yelpAPIClient.cancelAllPendingAPIRequests()
    yelpAPIClient.searchBusinesses(byTerm: "Martinis",
                                 location: nil,
                                 latitude: MapCenter.shared.latitude,
                                longitude: MapCenter.shared.longitude,
                                   radius: 16000,
                               categories: nil,
                                   locale: nil,
                                    limit: 20,
                                   offset: 0,
                                   sortBy: nil,
                               priceTiers: nil,
                                  openNow: false,
                                   openAt: nil,
                               attributes: nil) { (response) in

                                performUIUpdatesOnMain {

                                    if let response = response,
                                        let businesses = response.businesses,
                                        businesses.count > 0 {

                                        for business in businesses {
                                        Location.businesses.append(business)
                                            print(business.hours?[0].isOpenNow)

                                            let imageString = business.imageUrl?.absoluteString

                                            YelpClient.sharedInstance().loadImage(imageString, completionHandler: { (image) in
                                                Location.locationImages.append(image)
                                            })
                                        }

                                    }

这是响应映射到的 CDYelpBusiness 对象:

public class CDYelpBusiness: Mappable {

public var id: String?
public var name: String?
public var imageUrl: URL?
public var isClosed: Bool?
public var url: URL?
public var price: String?
public var phone: String?
public var displayPhone: String?
public var photos: [String]?
public var hours: [CDYelpHour]?
public var rating: Double?
public var reviewCount: Int?
public var categories: [CDYelpCategory]?
public var distance: Double?
public var coordinates: CDYelpCoordinates?
public var location: CDYelpLocation?
public var transactions: [String]?

public required init?(map: Map) {
}

public func mapping(map: Map) {
    id              <- map["id"]
    name            <- map["name"]
    imageUrl        <- (map["image_url"], URLTransform())
    isClosed        <- map["is_closed"]
    url             <- (map["url"], URLTransform())
    price           <- map["price"]
    phone           <- map["phone"]
    displayPhone    <- map["display_phone"]
    photos          <- map["photos"]
    hours           <- map["hours"]
    rating          <- map["rating"]
    reviewCount     <- map["review_count"]
    categories      <- map["categories"]
    distance        <- map["distance"]
    coordinates     <- map["coordinates"]
    location        <- map["location"]
    transactions    <- map["transactions"]
}
}

这是 CDYelpHour 对象:

public class CDYelpHour: Mappable {

public var hoursType: String?
public var open: [CDYelpOpen]?
public var isOpenNow: Bool?

public required init?(map: Map) {
}

public func mapping(map: Map) {
    hoursType   <- map["hours_type"]
    open        <- map["open"]
    isOpenNow   <- map["is_open_now"]
}
}

我可以更改我的 for 循环内的打印语句以提取其他属性,例如,使用 business.id 或 business.name,但尝试获取 hours 属性不起作用。

我正在尝试显示商家是否“现在营业”。虽然原始网络调用将此作为参数,但它仅用于过滤当前打开的业务的响应 - 当设置为 true 时。当设置为 false 时,作为默认值,它应该不返回对该参数的过滤器。虽然这似乎也不起作用。

这是框架:

https://github.com/chrisdhaan/CDYelpFusionKit

【问题讨论】:

    标签: ios swift networking alamofire graphql


    【解决方案1】:

    好吧,让这成为我自己更彻底阅读文档的一个教训。

    CDYelpFusionKit 框架旨在与 Yelp 的 RESTful API 一起使用,而不是与 graphQL API 一起使用,因为它可以在原始的单一网络调用中获取企业的营业时间。

    虽然 CDYelpBusiness 类确实包含小时变量,但必须在单独的网络调用中检索这些变量。

    美好时光。

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 2016-05-13
      • 2016-09-13
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多