微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 如果Element符合给定的协议,则扩展阵列以符合协议

我想做这样的事情,但是无法正确地获取语法或者在网络上的任何地方找到能够正确编写它的方法
protocol JSONDecodeable {
    static func withJSON(json: NSDictionary) -> Self?
}

protocol JSONCollectionElement: JSONDecodeable {
    static var key: String { get }
}

extension Array: JSONDecodeable where Element: JSONCollectionElement {
    static func withJSON(json: NSDictionary) -> Array? {
        var array: [Element]?
        if let elementJSON = json[Element.key] as? [NSDictionary] {
            array = [Element]()
            for dict in elementJSON {
                if let element = Element.withJSON(dict) {
                    array?.append(element)
                }
            }
        }
        return array
    }
}

因此,只有当此数组的元素符合JSONCollectionElement时,我才希望将Array与我的协议JSONDecodeable相符合.

这可能吗?如果是这样,语法是什么?

解决方法

Swift 4.2

在Swift 4.2中,我能够使用符合这样的协议的元素扩展数组:

public extension Array where Element: customstringconvertible{
    public var customDescription: String{
        var description = ""
        for element in self{
            description += element.description + "\n"
        }

        return description
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐