【问题标题】:Applying superclass array extensions to arrays of subclass instances将超类数组扩展应用于子类实例数组
【发布时间】:2020-07-26 07:27:02
【问题描述】:

有没有办法在子类实例的数组上使用已应用于超类的数组扩展?我正在尝试通过以下方式这样做:

超类的扩展:

extension Array where Element == Superclass {

    func appending(_ object:Element)-> [Element] {
        var array = self
        if self.filter({$0.id == object.id}).count == 0 {
            array.append(object)
        }
        
        return array
    }
}

子类数组的实现:

var subArray = [Subclass]()
subArray = subArray.appending(someObject)

但是,这给了我以下编译器错误:

"在 'Array' 上引用实例方法 'appending' 需要类型 “子类”和“超类”是等价的。”

有没有办法实现这个功能,还是我必须为每个子类创建单独的扩展?

【问题讨论】:

    标签: arrays swift class-extensions


    【解决方案1】:

    使用: 而不是== 来表示“一个子类型”:

    class Superclass {
        
    }
    
    class Subclass : Superclass {
        
    }
    
    // here!
    extension Array where Element: Superclass {
        func f() {}
    }
    
    let a = [Subclass]()
    a.f() // compiles!
    

    【讨论】:

      猜你喜欢
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      相关资源
      最近更新 更多