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