NS_OPTIONS로 GMSPlaceField로 이전

iOS용 Places SDK 버전 4.0.0부터 GMSPlaceField 유형에서 NS_OPTIONS 매크로를 사용합니다. SDK 버전 3.x에는 GMSPlaceFieldNS_ENUM로 표시되며 여전히 지원됩니다.

  • Objective-C를 사용하는 경우: 영향이 없습니다. 이전과 같이 GMSPlaceField를 계속 사용할 수 있습니다.

  • Swift를 사용하는 경우: GMSPlaceField(rawValue:) 문법을 생성자로 사용하면 구현이 중단됩니다. 이전 버전의 SDK에서는 이 문법을 선택적 GMSPlaceField?로 반환했습니다. 버전 4.0.0 이상은 선택사항이 아닌 GMSPlaceField 값을 반환합니다. 조건부 검사나 강제 언래핑과 같이 선택사항에 대해 실행되는 모든 작업은 실패합니다. 또한 이제 배열 문법을 사용하여 GMSPlaceField를 결합할 수 있습니다.

코드 이전

특정 조건부 래핑 해제 또는 강제 래핑 해제 문법이 Swift에서 중단됩니다. 다음 예에서는 이러한 문제를 해결하는 방법을 보여주고 배열 문법을 사용하여 GMSPlaceField를 선언하는 방법을 보여줍니다.

조건부 래핑 해제

다음 예시의 문이 if를 사용하여 조건부 래핑 해제가 필요한 GMSPlaceField 배열을 만드는 것을 보여줍니다. 그러면 컴파일러 오류 ('조건부 결합의 이니셜라이저는 GMSPlaceField이 아닌 Optional 유형이어야 합니다.')가 발생합니다.

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

이 문제를 해결하려면 다음과 같이 if 문을 삭제합니다.

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

배열 구문도 사용할 수 있습니다(예:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

래핑 해제 강제

다음 예의 문은 GMSPlaceField를 선택사항이 아닌 유형으로 사용하는 것을 보여줍니다. 그러면 컴파일러 오류 ('선택사항이 아닌 유형 GMSPlaceField의 값을 강제로 래핑 해제할 수 없음')가 발생합니다.

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

이 문제를 해결하려면 다음과 같이 GMSPlaceField를 선택적 유형으로 사용합니다.

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

배열 구문도 사용할 수 있습니다(예:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]