Swift 3,扩展阵列,其中Array的项目属于某种类型

ach*_*chi 5 arrays sequence swift swift-protocols swift3

我写了一个包含基本资产数据的结构:

struct Asset: AssetProtocol {

    init (id: Int = 0, url: String) {
        self.id = id
        self.url = URL(string: url)
    }

    var id: Int 
    var url: URL?

}
Run Code Online (Sandbox Code Playgroud)

它订阅 AssetProtocol

protocol AssetProtocol {
    var id: Int { get }
    var url: URL? { get }
}
Run Code Online (Sandbox Code Playgroud)

我希望扩展Array(Sequence),其中该Array中的元素是订阅AssetProtocol的项目.此外,这些函数能够在适当的位置改变数组.

extension Sequence where Iterator.Element: AssetProtocol {

    mutating func appendUpdateExclusive(element newAsset: Asset) {    
        ...
Run Code Online (Sandbox Code Playgroud)

我怎样才能迭代并改变这个序列?我已经尝试了六种方法,似乎无法做到正确!

dal*_*ook 6

而不是使用以Asset参数为参数的方法,Element而是考虑重复使用.由于您已Element在扩展定义中定义了约束,因此AssetProtocol上的所有方法和属性都将在以下实例上可用Element:

protocol AssetProtocol {
    var id: Int { get }
    var url: URL? { get }

    static func someStaticMethod()
    func someInstanceMethod()
}

extension Array where Element:AssetProtocol {
    mutating func appendUpdateExclusive(element newAsset: Element) {
        newAsset.someInstanceMethod()
        Element.someStaticMethod()

        append(newAsset)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这里的关键是将函数参数声明为:Element.谢谢! (2认同)