我想做这样的事情,但是无法正确地获取语法或者在网络上的任何地方找到能够正确编写它的方法:
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 } }