Bermigrasi ke GMSPlaceField sebagai NS_OPTIONS

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Mulai dari 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 akan ada implikasinya. Anda dapat terus menggunakan GMSPlaceField seperti sebelumnya.

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

Memigrasikan kode

Fungsi pemisahan bersyarat atau penggabungan paksa yang dibatalkan akan menjadi error di Swift. Contoh berikut menunjukkan cara memperbaiki masalah ini, dan juga menunjukkan penggunaan sintaksis array untuk mendeklarasikan GMSPlaceField:

Penggabungan bersyarat

Pernyataan dalam contoh berikut menunjukkan penggunaan if untuk membuat array GMSPlaceField yang memerlukan penggabungan bersyarat. Hal ini akan menghasilkan error compiler ("Penginisialisasi untuk binding bersyarat harus memiliki jenis Opsional, bukan 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 sintaksis array, seperti yang ditampilkan di sini:

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

Pelepasan paksa

Pernyataan dalam contoh berikut menunjukkan penggunaan GMSPlaceField sebagai jenis non-opsional. Ini akan menghasilkan error compiler ("Tidak dapat memaksakan nilai unwrap dari jenis GMSPlaceField non-opsional."):

// 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 sintaksis array, seperti yang ditampilkan di sini:

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