Beginning with Version 4.0.0 of the Places SDK for iOS, the GMSPlaceField
type now uses the NS_OPTIONS
macro. Versions 3.x of the SDK have GMSPlaceField
as NS_ENUM
and are still supported.
If you are using Objective-C: there are no implications. You can continue using
GMSPlaceField
as before.If you are using Swift: Your implementation will break if you are using the
GMSPlaceField(rawValue:)
syntax as the constructor, which older versions of the SDK returned as an optionalGMSPlaceField?
. Version 4.0.0 and higher returns a non-optionalGMSPlaceField
value; any operations that are performed on the optional, such as conditional checks or force unwraps, will fail. In addition, you may now use array syntax to combineGMSPlaceField
s
Migrating your code
Certain conditional unwrapping or force unwrapping syntaxes will break in Swift.
The following examples show how to fix these issues, and also demonstrate using
array syntax to declare GMSPlaceField
:
Conditional unwrapping
The statement in the following example shows using if
to create a
GMSPlaceField
array which requires conditional unwrapping. This will result
in a compiler error ("Initializer for conditional binding must have Optional
type, not GMSPlaceField
".)
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
To fix this issue, remove the if
statement, as shown here:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
You can also use array syntax, as shown here:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Force unwrapping
The statement in the following example shows using GMSPlaceField
as a non-
optional type. This will result in a compiler error ("Cannot force unwrap value
of non-optional type GMSPlaceField."):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
To fix this issue, use GMSPlaceField
as an optional type, as shown here:
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
You can also use array syntax, as shown here:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]