覆盖泛型函数会产生错误

时间:2019-09-01 13:22:42

标签: swift xcode generics

我正在generic function中写一个protocol,但是当error中的overriding function时会出现inherited classes

我使用的第一种方式

protocol BaseCellProtocol {
    associatedtype T
    func configure<T>(with object: T?)  
}

class TableViewCell: BaseTableViewCell {

    typealias T = String

    override func configure<T>(with object: T?) {
        label.text = object as? T
    }

}

但是这种方式会产生一个error

  

无法分配类型“ T”的值?键入“字符串?”

Toverrided类中是String,但是compiler不知道TString

第二种方式

protocol BaseCellProtocol {
    func configure<T>(with object: T?)
}

class TableViewCell: BaseTableViewCell {

    override func configure<String>(with object: String?) {
        label.text = object
    }

}

在这种情况下,error是:

  

无法分配类型为'String'的值?键入“字符串?”

哇啊?

我是generics的新手,我读过一些文献,但是对此有一些疑问。

更新

class BaseTableViewCell: UITableViewCell, BaseCellProtocol {

    typealias T = String

    func configure<T>(with object: T?) {
    }

}

1 个答案:

答案 0 :(得分:2)

只需删除功能中的protocol BaseCellProtocol { associatedtype T func configure(with object: T?) } class BaseTableViewCell: UITableViewCell, BaseCellProtocol { typealias T = String func configure(with object: T?) { } } class TableViewCell: BaseTableViewCell { override func configure(with object: String?) { label.text = object } } 。因为您在this.items = [ {label: 'Home', routerLink: '/'}, {label: 'Tab1', routerLink: '/tab1'}, {label: 'Tab2', routerLink: '/tab2', disabled= true}, {label: 'Tab3', routerLink: '/tab3'}, ]; 中有T。

if (this.auth.isUserLoggedIn) {
  this.items[2].disabled = false
} else {
  this.items[2].disabled = true
}