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가 아닌 선택사항 유형이 있어야 함').

// 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]