2

我正在使用 Swift 3 开发一个项目,ObjectMapper并且我有很多使用相同代码的功能。

进行转换的函数是这样的:

    func convertCategories (response:[[String : Any]]) {

    let jsonResponse = Mapper<Category>().mapArray(JSONArray: response )

    for item in jsonResponse!{
        print(item)
        let realm = try! Realm()
        try! realm.write {
            realm.add(item)
        }
    }

}

我想将类别(映射器)作为参数传递,所以我可以将任何类型的类类型传递给函数,并且只使用一个函数来完成这项工作,它看起来像这样:

    func convertObjects (response:[[String : Any]], type: Type) {

    let jsonResponse = Mapper<Type>().mapArray(JSONArray: response )

...

我已经尝试了很多想法,但没有结果,¿任何人都可以帮助我实现这一目标吗?

编辑:对于所有有同样问题的人,解决方案是这样的:

    func convertObjects <Type: BaseMappable> (response:[[String : Any]], type: Type)
{
    let jsonResponse = Mapper<Type>().mapArray(JSONArray: response )



    for item in jsonResponse!{
        print(item)
        let realm = try! Realm()
        try! realm.write {
            realm.add(item as! Object)
        }
    }


}

调用函数是:

self.convertObjects(response: json["response"] as! [[String : Any]], type: type)
4

1 回答 1

2

我怀疑您只是在这里遇到语法问题。你的意思是这样的:

func convertObjects<Type: BaseMappable>(response:[[String : Any]], type: Type)

你也可以这样写(有时更具可读性,特别是当事情变得复杂时):

func convertObjects<Type>(response:[[String : Any]], type: Type)
    where Type: BaseMappable {

您通常将其称为:

convertObjects(response: response, type: Category.self)

关键是convertObjects需要对要转换的每种类型进行专门化,并且需要声明一个类型参数 ( <Type>)。

于 2017-11-06T13:06:31.643 回答