그런 식으로 뭔가를하고 싶습니다. 사전 값을 문자열 열거 형으로 액세스하고 싶습니다. 나는 사전의 첨자를 오버로드하려고 노력하고 있지만 성공하지는 못했다.아래 첨자 : 문자열 열거 형을 사용하여 사전 값에 액세스
let district = address[JsonKeys.district]
JsonKeys은 다음과 같습니다 :
enum JsonKeys: String {
case key1
case key2
case key...
}
내 첨자 과부하는 다음과 같다 :
사전에 액세스
extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
subscript(index: FOJsonKeys) -> AnyObject {
get {
return self[ index.rawValue] as! AnyObject
}
}
}
나는 다음과 같은 메시지가 얻을 :
을**Cannot subscript a value of type 'Dictionary<Key, Value>' with an index of type 'String'**
어디에서 잘못 되었나요? PS
:이 할 싶지 않아 (이 오류를 수정,하지만 코드는 이런 식으로 읽을 수) :
let district = address[JsonKeys.district.rawValue]
사전은 JSON이 AlamoFire 나에게 주어진 사전을 구문 분석됩니다. 나는 그 타입을 바꿀 수 없다고 확신한다.
이것은 더 심각한 문제를 나타낼 수 있습니다. 이러한 사전을 가능한 한 빨리 구조체 또는 클래스로 파싱해야하므로 JSON 문자열 키를 처리해야하는 코드는 매우 현지화되어야합니다. 프로그램에서 둘 이상의 장소에서 이러한 키를 사용해야하는 경우 잘못된 모델 레이어가있을 가능성이 큽니다. 이것이 실패하는 이유는 "StringLiteralConvertible"이 * exact * String이 아니기 때문입니다. 현재 Swift에서이 확장을 작성하는 것은 불가능합니다 (알려진 컴파일러 제한 사항이지만, 필요할 때 언제나 다른 일을 잘못하고있는 것입니다). –
이 코드의 목적은 Json 사전을 클래스로 파싱합니다. String 키를 사용하고 싶지 않습니다. String enum을 사용하는 것이 더욱 강력 해 보인다. – t4ncr3d3
그건 공정 하네. 아래에 답했다. –