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
GMSPlaceFieldas 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-optionalGMSPlaceFieldvalue; 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 combineGMSPlaceFields
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]