0
我有這樣的協議如何在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相同。我試圖收縮Element。我一直試圖讓這個工作整整兩天,我所做的一切似乎都沒有取得任何進展。我錯過了什麼?
我要把這一個機會,一旦我能回到我的項目。我嘗試過類似的東西,我記得收到一條錯誤消息,指出只能使用協議而不是具體類型來收縮Element。 –
下面的錯誤顯示在擴展簽名 '類型'元素'被約束爲非協議類型'Dictionary'' –