在 AlamoFire 框架中访问映射对象返回 nil 值
Posted
技术标签:
【中文标题】在 AlamoFire 框架中访问映射对象返回 nil 值【英文标题】:Accessing mapped object in AlamoFire framework returns nil value 【发布时间】: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
【问题讨论】:
【参考方案1】:好吧,让这成为我自己更彻底阅读文档的一个教训。
CDYelpFusionKit 框架旨在与 Yelp 的 RESTful API 一起使用,而不是与 graphQL API 一起使用,因为它可以在原始的单一网络调用中获取企业的营业时间。
虽然 CDYelpBusiness 类确实包含小时变量,但必须在单独的网络调用中检索这些变量。
美好时光。
【讨论】:
以上是关于在 AlamoFire 框架中访问映射对象返回 nil 值的主要内容,如果未能解决你的问题,请参考以下文章