加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

arrays – Swift 3,Extend Array,其中Array的项目属于某种类型

发布时间:2020-12-14 04:42:47 所属栏目:百科 来源:网络整理
导读:我写了一个包含基本资产数据的结构: 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
我写了一个包含基本资产数据的结构:

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 }
}

我希望扩展Array(Sequence),其中该Array中的元素是订阅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)
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读