Bermigrasi ke GMSPlaceField sebagai NS_OPTIONS

Mulai Places SDK for iOS Versi 4.0.0, jenis GMSPlaceField sekarang menggunakan makro NS_OPTIONS. SDK versi 3.x memiliki GMSPlaceField sebagai NS_ENUM dan masih didukung.

  • Jika Anda menggunakan Objective-C: tidak ada implikasi. Anda dapat terus menggunakan GMSPlaceField seperti sebelumnya.

  • Jika Anda menggunakan Swift: Penerapan Anda akan rusak jika Anda menggunakan sintaksis GMSPlaceField(rawValue:) sebagai konstruktor, yang ditampilkan oleh SDK versi lama sebagai GMSPlaceField? opsional. Versi 4.0.0 dan yang lebih tinggi menampilkan nilai GMSPlaceField non-opsional; setiap operasi yang dilakukan pada opsional, seperti pemeriksaan bersyarat atau pembukaan paksa, akan gagal. Selain itu, Anda kini dapat menggunakan sintaksis array untuk menggabungkan GMSPlaceField

Memigrasikan kode Anda

Sintaksis pelepasan opsional atau pelepasan paksa tertentu akan rusak di Swift. Contoh berikut menunjukkan cara memperbaiki masalah ini, dan juga menunjukkan penggunaan sintaksis array untuk mendeklarasikan GMSPlaceField:

Pelepasan opsional bersyarat

Pernyataan dalam contoh berikut menunjukkan penggunaan if untuk membuat array GMSPlaceField yang memerlukan pelepasan bersyarat. Hal ini akan menghasilkan error compiler ("Initializer for conditional binding must have Optional type, not GMSPlaceField".)

// Before.
if let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }

Untuk memperbaiki masalah ini, hapus pernyataan if, seperti yang ditunjukkan di sini:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something

Anda juga dapat menggunakan sintaks array, seperti yang ditunjukkan di sini:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]

Pembukaan paksa

Pernyataan dalam contoh berikut menunjukkan penggunaan GMSPlaceField sebagai jenis non- opsional. Hal ini akan menghasilkan error compiler ("Cannot force unwrap value of non-optional type GMSPlaceField."):

// Before.
let field = GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!

Untuk memperbaiki masalah ini, gunakan GMSPlaceField sebagai jenis opsional, seperti yang ditunjukkan di sini:

// After.
let field =  GMSPlaceField(
    rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)

Anda juga dapat menggunakan sintaks array, seperti yang ditunjukkan di sini:

let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]