Начиная с версии 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]