[英]How to extend an array in Swift?
我有這個協議
protocol JsonConvertable {
init?(_ underlyingValue: UnderlyingValue)
}
UnderlyingValue
是一個enum
:
enum UnderlyingValue {
case string(String)
case int(Int)
case double(Double)
case bool(Bool)
case array(Array<Dictionary<String, AnyObject>>)
case dictionary(Dictionary<String, AnyObject>)
init?(value: JsonConvertable) {
switch rawValue {
case let value as [String: AnyObject]: self = .dictionary(value)
case let value as Array<[String: AnyObject]>: self = .array(value)
case let value as Double: self = .double(value)
case let value as Int: self = .int(value)
case let value as Bool: self = .bool(value)
case let value as String: self = .string(value)
default: return nil
}
}
}
我可以擴展大多數類型,如下所示
extension String: JsonConvertable {
init?(_ underlyingValue: UnderlyingValue) {
switch underlyingValue {
case .bool(let value): self = value
default: return nil
}
}
但是,數組擴展名給我錯誤: Cannot assign value of type 'Array<Dictionary<String, AnyObject>>' to type 'Array<_>'
extension Array: JsonConvertable {
init?(_ underlyingValue: UnderlyingValue) {
switch underlyingValue {
case .array(let value): self = value
default: return nil
}
}
}
我已經嘗試了所有可以想到的方法,但是沒有任何效果。 我試圖讓JsonConvertable符合ArrayLiteralConvertable,我試圖在init中使用泛型,但是我才剛剛開始理解泛型,並且並不真正知道在這種情況下它會有什么好處,與AssociatedType一樣。 我試圖收縮元素。 我一直在努力使其工作整整2天,而我所做的一切似乎都沒有取得任何進展。 我想念什么?
在擴展方法中,您正在擴展Array,它是Array <_>的類型,而_underlyingValue是Array <[String:AnyObject]>的類型。
您是否嘗試過這種方式:
extension Array where Element:Dictionary<String, AnyObject>, Element:JsonConvertable {
init?(_underlyingValue : UnderlyingValue){
switch _underlyingValue {
case .array(let value):
self = value
default:
return nil
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.