为什么我不能在使用swift Generics的协议中调用该方法?

时间:2017-01-18 09:21:41

标签: generics swift3 swift-protocols

我知道这个问题的标题不正确。但我无法想出更好的头衔,如果有人建议更好的头衔,我会修改。

以下是问题:

我有一个协议,

import Foundation

protocol MyFilter {
    var currentlySelected : Bool { get set }
    func configure<T> (filterInfo : T) where T: MyGenericDataModel
}

这要求所有确认类声明一个名为currentSelected的变量,并且还期望编写一个方法,该方法接受一个确认MyGenericDataModel协议的参数。

MyGenericDataModel看起来像,

import Foundation

protocol MyGenericDataModel {
    init(data : JSON)
}

有多个类确认MyGenericDataModel。像,

struct MyDataModel1 : MyGenericDataModel {
    var id : String? = nil
    //other properties

    init(data : JSON) {
    }
}

struct MyDataModel2 : MyGenericDataModel {
    var id : String? = nil
    //other properties

    init(data : JSON) {
    }
}

等等。

现在我获得了可以是任何自定义数据模型的数据数组。所以我声明了一个对象数组,它们确认了MyGenericDataModel协议。

var passedDataSource: Array< MyGenericDataModel>? = nil

现在我需要调用MyFilter的方法,

let filterInfo = passedDataSource![indexPath.row]
abcd.configure(filterInfo: filterInfoToPass)

abcd显然向MyFilter确认了为什么我可以调用configure。

问题

Xcode提供编译错误,

  

无法使用类型'的参数列表调用'configure'(filterInfo:   MyGenericDataModel)

修改

根据luk2302的评论,我发布了abcd类的实现细节:)

class MyCellClass: UICollectionViewCell, MyFilter{
    var currentlySelected : Bool = false
    func configure<T>(filterInfo: T) where T : MyGenericDataModel {
       //use filter info
       //perform some UI operations to update cell UI
    }
}

请帮忙。提前谢谢。

0 个答案:

没有答案