HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 映射到Swift对象问题,显示使用Alamofire ObjectMapper的nil大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_1@
我是iOS和 Swift开发环境的新手.我试图使用Alamofire来提取JSON和AlamofireObjectMapper,以便将检索到的JSON集合映射回我的Swift对象.

问题是我能够通过Alamofire请求获取JSON并显示计数,但映射部分似乎显示为零.是我错过了什么.感谢帮助.

模型类

import UIKit
import CoreLOCATIOn
import ObjectMapper

class BranchObjectMapper : Mappable {
    // MARK: Properties
    var id: Int?
    var cityId: Int?
    var areaId: Int?
    var name: String?
    var nameAr: String?
    var branchAddr: String?
    var branchAddr2: String?
    var LOCATIOn: CLLOCATIOn?

    required init?(_ map: Map) {
        mapping(map)
    }

    func mapping(map: Map) {
        id     <- map["id"]
        cityId    <- map["cityId"]
        areaId  <- map["areaId"]
        name  <- map["name"]
        nameAr  <- map["nameAr"]
        branchAddr  <- map["branchAddr"]
        branchAddr2  <- map["branchAddr2"]
        LOCATIOn  <- map["LOCATIOn"]
    }

}

在viewDidLoad()中请求部分

Alamofire.request(.GET,UrlEndpoints.branchUrl()).responseArray { (response: Response<[BranchObjectMapper],NSError>) in

    self.branchList = response.result.value!

    print(self.branchList.count) // count is correct

    for branch in self.branchList {      
        print(branch.id) // prints nil
        print(branch.id) // prints nil
    }
}

提前致谢

完整的JSON响应如下所示.在Model中只构建了需要的东西.

解决方法

我想你错过了ObjectMapper lib的正确文档.
检查这个 Github ObjectMapper.

这些是lib支持的类型:

>国际
>布尔
>双倍
>漂浮
>字符串
> RawRepresentable(枚举)
>数组< AnyObject>
> Dictionary< String,AnyObject>
>对象< T:可映射>
>数组< T:Mappable>
> Array< Array< T:Mappable>>
> Set< T:Mappable>
> Dictionary< String,T:Mappable>
> Dictionary< String,Array< T:Mappable>>
>以上所有选项
>以上隐含的解包方案

因此,如果您尝试映射不在该列表中的Object,则结果为nil.

你的情况下是var LOCATIOn:CLLOCATIOn?.

如果需要映射CLLOCATIOn对象,一种方法是将CustomcatLLOCATIOn映射到所有属性,如下所示:
JSON(我不知道你的Json,这是一个例子)

"LOCATIOn":{
    "long": 43.666,"lat": 73.4
}

Swift:创建另一个文件“CustomcatLLOCATIOn”,例如第一个文件,但用于映射CLLOCATIOn和Json

var latitude: Double?
var longitude: Double?

required init?(_ map: Map) {
mapping(map)

}
func mapping(map: Map) {

   longitude <- map["long"]
   latitude <- map["lat"]
}

现在,您可以映射“假”CLLOCATIOn对象:
    var LOCATIOn:CustomcatLLOCATIOn?

然后,如果你想要一个真正的CLLOCATIOn.只需像这样创建一个Simply Extension(将它添加到CustomcatLLOCATIOn文件中):

extension CLLOCATIOn {
     public class func createFromCustomcatLLOCATIOn(custom: CustomcatLLOCATIOn) -> CLLOCATIOn {
         return self.init(custom.latitude,custom.longitudE)
     }
}

使用转换:

var LOCATIOnCLL = CLLOCATIOn.createFromCustomcatLLOCATIOn(LOCATIOn) // Now is a CLLOCATIOn

编辑:Alamofire请求

我在我的应用程序上使用最新版本的AlamofireObjectMapper for ios 8.0获得了相同的请求

Alamofire.request(.GET,UrlEndpoints.branchUrl()).responseArray { (response: [BranchObjectMapper]?,error : ErrorType?) in
    if(error != nil) {
        print(error)
    }else{
        print("data downloaded")


        if let response = response {
            branchList(responsE)
            for branch in self.branchList {
                print(branch.id)
                print(branch.Name)
            }
        }
    }
}

大佬总结

以上是大佬教程为你收集整理的ios – 映射到Swift对象问题,显示使用Alamofire ObjectMapper的nil全部内容,希望文章能够帮你解决ios – 映射到Swift对象问题,显示使用Alamofire ObjectMapper的nil所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。