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]