Начиная с версии 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, для которого требуется условная распаковка. В результате возникнет ошибка компилятора ("Инициализатор для условной привязки должен иметь тип 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 используется как необязательный тип. Это приведет к ошибке компилятора ("Cannot force unwrap value of non-optional type 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]