Переход на GMSPlaceField как NS_OPTIONS

Начиная с версии 4.0.0 Places SDK для iOS, тип GMSPlaceField теперь использует макрос NS_OPTIONS . Версии 3.x SDK имеют GMSPlaceField как NS_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]