Arrays 带约束的数组类型扩展不能有继承子句-swift 2

Arrays 带约束的数组类型扩展不能有继承子句-swift 2,arrays,swift,protocols,Arrays,Swift,Protocols,在swift 2中,我想扩展数组类型。我有一个JSONDecodable协议。我想对编译器说的是,如果Array的元素也是JSONDecodable,那么就要使Array符合协议JSONDecodable。代码如下: public protocol JSONDecodable { static func createFromJSON(json: [String: AnyObject]) throws -> Self } extension Array: JSONDecodable

在swift 2中,我想扩展数组类型。我有一个
JSONDecodable
协议。我想对编译器说的是,如果
Array
的元素也是
JSONDecodable
,那么就要使
Array
符合协议
JSONDecodable
。代码如下:

public protocol JSONDecodable {
    static func createFromJSON(json: [String: AnyObject]) throws -> Self
}

extension Array: JSONDecodable where Element: JSONDecodable {

}
但编译器给出了错误:“带约束的类型数组的扩展不能有继承子句”

那么有没有其他方法来完成这种行为呢?

我想你在Twitter上发现的意思是:

protocol X {
    var xxx: String { get }
}

// This is a wrapper struct
struct XArray: X {

    let array: Array<X>

    var xxx: String {
        return "[\(array.map({ $0.xxx }).joinWithSeparator(", "))]"
    }

}

// Just for this demo
extension String: X {
    var xxx: String {
        return "x\(self)"
    }
}

let xs = XArray(array: ["a", "b", "c"])
print(xs.array) // ["a", "b", "c"]
print(xs.xxx) // [xa, xb, xc]
协议X{
var xxx:字符串{get}
}
//这是一个包装结构
结构XArray:X{
让数组:数组
变量xxx:字符串{
返回“[\(array.map({$0.xxx}).joinWithSeparator(“,”)”)
}
}
//就为了这个演示
扩展字符串:X{
变量xxx:字符串{
返回“x\(自我)”
}
}
设xs=XArray(数组:[“a”、“b”、“c”])
打印(xs.array)/[“a”、“b”、“c”]
打印(xs.xxx)/[xa,xb,xc]

小字体擦除怎么样?它应该做的滴答声

protocol JSONDecodable {
    init(json: JSON) throws
}
而Swift 3不允许类似do的扩展

extension Array: JSONDecodable where Element: JSONDecodable
但有可能做到:

extension Array: JSONDecodable {
    init(json: JSON) throws {
        guard let jsonArray = json.array,
            let decodable = Element.self as? JSONDecodable.Type else {
                throw JSONDecodableError.undecodable
        } 

        self = jsonArray.flatMap { json in
            let result: Element? = (try? decodable.init(json: json)) as? Element
            return result
        }
    }
}

我发现了这个..twitter.com/jadengeller/status/644735717814349824知道他所说的“编写包装结构”是什么意思吗?这应该标记为答案。