Swift 3 및 Xcode 8의 중첩 사전에서 값을 가져 오는 문제

Adelmaer

다음과 같이 JSON을 구문 분석합니다.

 let dictionary = try JSONSerialization.jsonObject(with: geocodingResultsData as Data, options: .mutableContainers)

결과로 다음 중첩 사전을 가져옵니다.

{ response =  { GeoObjectCollection = { featureMember =  
( 
{  GeoObject = { Point =  { pos = "40.275713 59.943413"; };   };  },
{  GeoObject = { Point =  { pos = "40.273162 59.944292"; };  };  } 
);
};
};
}

이 사전에서 좌표 값을 가져 와서 새 latutudeString 및 longitudeString 변수에 저장하려고합니다.

Xcode 8 GM까지는이 코드로 저에게 효과적이었습니다.

 if let jsonCoordinatesString: String = dictionary["response"]!!["GeoObjectCollection"]!!["featureMember"]!![0]["GeoObject"]!!["Point"]!!["pos"]!! as? String {

            var latLongArray = jsonCoordinatesString.components(separatedBy: " ")

            let latitudeString = latLongArray[1]
            let longitudeString = latLongArray[0]

        }

하지만 Xcode 8 GM을 설치했기 때문에 오류가 발생합니다.

유형 Any에 첨자 멤버가 없습니다.

여기에 이미지 설명 입력

Xcode 8로 Swift 3을 수정하는 방법은 무엇입니까? 나는 그것을 캐스팅 할 수 있다고 읽었지만 최신 Xcode를 사용하여 swift 3의 중첩 사전과 함께 작동하도록 만드는 방법을 정확히 모릅니다. 나는 "아래 첨자의 모호한 사용"을 해결할 수 없다는 것을 읽었 지만 제 경우에는 실제로 도움이되지 않았습니다.

OOPer

JSON 데이터는 Swift에서 다음 유형을 갖습니다.

[String: [String: [String: [[String: [String: [String: String]]]]]]]

너무 깊게 중첩 된 유형을 사용하는 것은 피하고 싶지만 감히 사용한다면 다음과 같이 작성할 수 있습니다.

enum MyError: Error {
    case invalidStructure
}
do {
    guard let dictionary = try JSONSerialization.jsonObject(with: geocodingResultsData as Data, options: .mutableContainers) as? [String: [String: [String: [[String: [String: [String: String]]]]]]] else {
        throw MyError.invalidStructure
    }
    if let jsonCoordinatesString: String = dictionary["response"]?["GeoObjectCollection"]?["featureMember"]?[0]["GeoObject"]?["Point"]?["pos"] {

        var latLongArray = jsonCoordinatesString.components(separatedBy: " ")

        let latitudeString = latLongArray[1]
        let longitudeString = latLongArray[0]

    }
} catch let error {
    print(error)
}

그러나 JSON 데이터의 관련없는 멤버를 숨기고있을 수 있으며 이로 인해이 as?변환 이 중단 될 수 있습니다 .

따라서 다음과 같이 Swift 3에서 "필요한"경우가 있습니다.

do {
    guard let dictionary = try JSONSerialization.jsonObject(with: geocodingResultsData as Data, options: .mutableContainers) as? [String: AnyObject] else {
        throw MyError.invalidStructure
    }
    if
        let response = dictionary["response"] as? [String: AnyObject],
        let geoObjectCollection = response["GeoObjectCollection"] as? [String: AnyObject],
        let featureMember = geoObjectCollection["featureMember"] as? [[String: AnyObject]],
        !featureMember.isEmpty,
        let geoObject = featureMember[0]["GeoObject"] as? [String: AnyObject],
        let point = geoObject["Point"] as? [String: AnyObject],
        let jsonCoordinatesString = point["pos"] as? String
    {
        var latLongArray = jsonCoordinatesString.components(separatedBy: " ")

        let latitudeString = latLongArray[1]
        let longitudeString = latLongArray[0]

    }
} catch let error {
    print(error)
}

( let는 Swift 3의 각 Optional-bindings에 필수입니다 . 원하는 경우 모든를 AnyObjects로 변경할 수 있습니다 Any.)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

중첩 배열 alamofire swift 3의 값 가져 오기

분류에서Dev

Xcode (Swift 또는 Objective C)의 NSPopUpButton에서 선택한 항목의 제목 문자열을 가져 오는 방법

분류에서Dev

Python의 JSON에서 중첩 된 사전 및 배열에서 특정 값 가져 오기

분류에서Dev

목록 포트 매트의 중첩 사전에서 데이터 프레임으로 키 및 값 가져 오기

분류에서Dev

중첩 함수의 함수에 대한 반환 값 (Swift 3 | Xcode)

분류에서Dev

JSON 배열의 중첩 된 객체에서 모든 키 및 해당 값 가져 오기 (jQuery 제외)

분류에서Dev

MongoDB PHP의 컬렉션에서 문서 내에 중첩 된 객체 값을 가져 오는 방법

분류에서Dev

Python-중첩 된 사전을 통해 반복 및 값 가져 오기

분류에서Dev

중첩 된 Python 사전 내에서 특정 값의 개수 가져 오기

분류에서Dev

목록 내 중첩 된 사전에서 고유 값의 키 가져 오기

분류에서Dev

iOS의 URL에서 특정 값을 가져 오는 방법-Swift 3

분류에서Dev

마지막 중첩`(`및`)`사이에 문자열을 가져 오는 방법은 무엇입니까?

분류에서Dev

중첩 된 사전 및 목록에서 값으로 Python3 검색 한 다음 가장 가까운 키 / 값 쌍을 가져옵니다.

분류에서Dev

Swift에서 복잡한 중첩 사전 / 배열 조합에 대한 키 값 가져 오기

분류에서Dev

바닐라 ActionScript 3에서 중첩 된 자식에 대한 addChild () 호출을 가져 오는 데 문제가 있습니다.

분류에서Dev

바닐라 ActionScript 3에서 중첩 된 자식에 대한 addChild () 호출을 가져 오는 데 문제가 있습니다.

분류에서Dev

Alamofire는 Swift 3, Xcode 8에서 오류를 제공합니다.

분류에서Dev

중첩 배열에서 값을 반환하는 방법-Swift 3

분류에서Dev

ASP Classic 및 aspJSON을 사용하여 중첩 된 JSON 값 가져 오기

분류에서Dev

"x"값 Swift 3을 제외한 배열의 모든 값 가져 오기

분류에서Dev

중첩 사전에서 공통 값 가져 오기

분류에서Dev

중첩 된 사전에서 최소값 가져 오기

분류에서Dev

중첩 사전 Python Odoo에서 값 가져 오기

분류에서Dev

중첩 된 사전에서 값 가져 오기

분류에서Dev

중첩 된 사전에서 목록으로 값 가져 오기

분류에서Dev

중첩 된 사전에서 키 값 가져 오기

분류에서Dev

Python 3에서 중첩 사전을 빌드 할 때 문제

분류에서Dev

파이썬의 중첩 사전에서 값을 얻는 가장 좋은 방법

분류에서Dev

중첩 된 객체 배열이있는 여러 문서에서 mongodoDb의 쿼리와 일치하는 모든 값을 한 번에 가져 오는 방법

Related 관련 기사

  1. 1

    중첩 배열 alamofire swift 3의 값 가져 오기

  2. 2

    Xcode (Swift 또는 Objective C)의 NSPopUpButton에서 선택한 항목의 제목 문자열을 가져 오는 방법

  3. 3

    Python의 JSON에서 중첩 된 사전 및 배열에서 특정 값 가져 오기

  4. 4

    목록 포트 매트의 중첩 사전에서 데이터 프레임으로 키 및 값 가져 오기

  5. 5

    중첩 함수의 함수에 대한 반환 값 (Swift 3 | Xcode)

  6. 6

    JSON 배열의 중첩 된 객체에서 모든 키 및 해당 값 가져 오기 (jQuery 제외)

  7. 7

    MongoDB PHP의 컬렉션에서 문서 내에 중첩 된 객체 값을 가져 오는 방법

  8. 8

    Python-중첩 된 사전을 통해 반복 및 값 가져 오기

  9. 9

    중첩 된 Python 사전 내에서 특정 값의 개수 가져 오기

  10. 10

    목록 내 중첩 된 사전에서 고유 값의 키 가져 오기

  11. 11

    iOS의 URL에서 특정 값을 가져 오는 방법-Swift 3

  12. 12

    마지막 중첩`(`및`)`사이에 문자열을 가져 오는 방법은 무엇입니까?

  13. 13

    중첩 된 사전 및 목록에서 값으로 Python3 검색 한 다음 가장 가까운 키 / 값 쌍을 가져옵니다.

  14. 14

    Swift에서 복잡한 중첩 사전 / 배열 조합에 대한 키 값 가져 오기

  15. 15

    바닐라 ActionScript 3에서 중첩 된 자식에 대한 addChild () 호출을 가져 오는 데 문제가 있습니다.

  16. 16

    바닐라 ActionScript 3에서 중첩 된 자식에 대한 addChild () 호출을 가져 오는 데 문제가 있습니다.

  17. 17

    Alamofire는 Swift 3, Xcode 8에서 오류를 제공합니다.

  18. 18

    중첩 배열에서 값을 반환하는 방법-Swift 3

  19. 19

    ASP Classic 및 aspJSON을 사용하여 중첩 된 JSON 값 가져 오기

  20. 20

    "x"값 Swift 3을 제외한 배열의 모든 값 가져 오기

  21. 21

    중첩 사전에서 공통 값 가져 오기

  22. 22

    중첩 된 사전에서 최소값 가져 오기

  23. 23

    중첩 사전 Python Odoo에서 값 가져 오기

  24. 24

    중첩 된 사전에서 값 가져 오기

  25. 25

    중첩 된 사전에서 목록으로 값 가져 오기

  26. 26

    중첩 된 사전에서 키 값 가져 오기

  27. 27

    Python 3에서 중첩 사전을 빌드 할 때 문제

  28. 28

    파이썬의 중첩 사전에서 값을 얻는 가장 좋은 방법

  29. 29

    중첩 된 객체 배열이있는 여러 문서에서 mongodoDb의 쿼리와 일치하는 모든 값을 한 번에 가져 오는 방법

뜨겁다태그

보관