首页 > 解决方案 > 对象映射失败但有响应

问题描述

我正在映射来自这个http://www.reddit.com/reddits.json的 json 响应,但我只需要来自该 json 的很少,所以我像下面的代码一样映射它,我也在用户内部执行请求

class Users: Mappable {

    var kind: String?
    var data: Data?

    required init?(map: Map){
    }

    func mapping(map: Map) {
        kind <- map["kind"]
        data <- map["data"]
    }
}

class Children: Mappable {

    var kind: String?
    var data: Data?

    required init?(map: Map){
    }

    func mapping(map: Map) {
        kind <- map["kind"]
        data <- map["data"]
    }
}

class Data: Mappable {

    var title: String?
    var displayNamePrefixed: String?
    

    required init?(map: Map){
    }

    func mapping(map: Map) {
        title <- map["title"]
        displayNamePrefixed <- map["display_name_prefixed"]
    }
}

extension Users {
    
    static func getUsers() -> Single<[Users]> {
        let path = API.Path.users.details
        let params: [String: Any] = [
            "utcOffset": TimeZone.current.utcOffset
        ]
        return API.requestMany(path: path, method: .get, parameters: params)
    }
}

这是我的请求代码

    static func requestMany<T>(path: String, method: HTTPMethod, parameters: [String: Any] = [:]) -> Single<[T]> where T: BaseMappable {
        return NetworkManager.shared.request(path: path, method: method, parameters: parameters)
            .flatMap { (response) -> Observable<[T]> in
                print("HOST:\(baseURL)")
                print("PATH:\(path)")
                print("PARAMETERS:\(parameters)")
                print("RESPONSE:\(response?.description ?? "")")
                if let error = response as? NSError {
                    return Observable<[T]>.error(error)
                }
                guard let json = response as? [[String: Any]] else {
                    return Observable<[T]>.error(NSError(domain: path,
                                                         code: -1,
                                                         userInfo: [NSLocalizedDescriptionKey: "Object mapping failed"]))
                }
                let array = Mapper<T>().mapArray(JSONArray: json)
                return Observable<[T]>.just(array)
            }
            .observeOn(MainScheduler.instance)
            .asSingle()
    }

它说对象映射失败,即使我可以在控制台中看到响应

Object mapping failed
Unhandled error happened: Error Domain=reddits.json Code=-1 "Object mapping failed" UserInfo={NSLocalizedDescription=Object mapping failed}

标签: swiftalamofirerx-swiftobjectmapper

解决方案


推荐阅读