나는이 프로토콜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
}
}
}
배열 확장이 나에게 오류 Cannot assign value of type 'Array<Dictionary<String, AnyObject>>' to type 'Array<_>'
를주고있다 그러나
extension String: JsonConvertable {
init?(_ underlyingValue: UnderlyingValue) {
switch underlyingValue {
case .bool(let value): self = value
default: return nil
}
}
을 다음과 같이 나는 대부분의 유형을 확장 할 수 있습니다
extension Array: JsonConvertable {
init?(_ underlyingValue: UnderlyingValue) {
switch underlyingValue {
case .array(let value): self = value
default: return nil
}
}
}
내가 생각할 수있는 모든 것을 시도했지만 아무것도 작동하지 않습니다. JsonConvertable을 ArrayLiteralConvertable에 맞추려고했는데 init에서 제네릭을 사용해 보았지만 generics를 이해하기 시작했으며 실제로이 경우 AssociatedType과 같은 방식으로 어떻게 유용 할 지 모릅니다. 나는 요소를 수축 시키려고 노력했다. 나는 이것을 2 일 내내 일하도록 노력해 왔고, 내가하는 모든 일은 아무런 진전을 보이지 않는 것처럼 보인다. 내가 뭘 놓치고 있니?
:
은이 방법을 시도하게한다. 나는 비슷한 것을 시도해 보았습니다. 프로토콜을 사용하여 Element를 constrict 할 수 있다는 오류 메시지를 받았으며 구체적인 형식이 아님을 기억합니다. –
아래의 오류는 내선 번호 'type '요소'non-protocol type으로 제한 'Dictionary –