arrays - Swift 3,扩展数组,其中数组的项目属于某种类型

标签 arrays swift swift3 sequence swift-protocols

我编写了一个包含基本 Assets 数据的结构:

struct Asset: AssetProtocol {

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

    var id: Int 
    var url: URL?

}

它订阅了AssetProtocol

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

我希望扩展数组(序列),其中数组中的元素是订阅 AssetProtocol 的项目。此外,为了让这些函数能够就地改变数组。

extension Sequence where Iterator.Element: AssetProtocol {

    mutating func appendUpdateExclusive(element newAsset: Asset) {    
        ...

我如何遍历并改变这个序列?我已经尝试了六种方法,但似乎都做不好!

最佳答案

与其使用将 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)
    }
}

关于arrays - Swift 3,扩展数组,其中数组的项目属于某种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40248800/

相关文章:

javascript - 一种在 JavaScript 数组中查找最接近值的算法

java - 替换数组中的重复字符

swift - 具有自定义遍历成本的 GKGridGraphNode

ios - 在 Swift 中处理解析 JSON 时出错

swift - 追加到 [字符 : [object]] returns 0 key/value pair 的字典

ios - 快速为图像添加滤镜

javascript - 遍历表并在 js/jquery 中创建一个数组

arrays - 如何从当前函数VBA Excel获取单元格行

uikit - CGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZero 在 Swift 中不可用

ios - Swift3 中的 NSIndexPath 初始化有何变化?