带有struct和generic对象的Swift Array扩展

时间:2017-06-06 03:27:16

标签: arrays struct swift3

所以我有这段代码:

struct Asset<T>: AssetProtocol{
    typealias AssetType = T

    var parent: T!
    var children: [T]!
    init(parent: T, children: [T] = [T](),){
        self.parent = parent
        self.children = children
    }
}

protocol AssetProtocol{
    associatedtype AssetProtocolType
    var parent: AssetProtocolType! { get }
    var children: [AssetProtocolType]! { get }
}

extension Array where Element: AssetProtocol{
    fun getExtractParents() -> [<I’m not sure what type should be here the “T” doesn’t work>] {
        // iterate here to get all the parents then return it. 
    }
}

有没有办法可以创建一个数组扩展和一个返回该数组中所有“父”的方法?请注意,“parent”的类型是通用的,如struct Asset。

中所示

2 个答案:

答案 0 :(得分:0)

所以我觉得我找到了答案。我不确定这是否正确或有效,但它对我有用。

extension Array where Element: AssetProtocol{
    func extractParents() -> [Element.AssetProtocolType] {
        var parents: [Element.AssetProtocolType] = []
        for element in self {
            parents.append(element.parent)
        }

        return parents
    }
}

如果有人愿意,我仍然愿意接受建议......

答案 1 :(得分:0)

您的解决方案有效,但是有一种更快捷,更快捷的方法:

extension Array where Element: AssetProtocol {
    var parents: [Element.AssetProtocolType] {
        return self.map( { $0.parent } )
    }
}

编码愉快!