Swift 3、扩展Array,其中Array的项是某种类型
Swift 3, Extend Array where items of Array are of a certain type
我编写了一个包含基本资产数据的结构:
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)
}
}
我编写了一个包含基本资产数据的结构:
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)
}
}