Начиная с версии 4.0.0 SDK Places для 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 , требующего условного развертывания. Это приведет к ошибке компилятора ("Инициализатор для условной привязки должен иметь тип Optional, а не 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]