Di chuyển sang GMSPlaceField dưới dạng NS_OPTIONS

Kể từ Phiên bản 4.0.0 của SDK Địa điểm dành cho iOS, loại GMSPlaceField hiện sử dụng macro NS_OPTIONS. Phiên bản 3.x của SDK có GMSPlaceFieldNS_ENUM và vẫn được hỗ trợ.

  • Nếu bạn đang sử dụng Objective-C: không có gì khác biệt. Bạn có thể tiếp tục sử dụng GMSPlaceField như trước.

  • Nếu bạn đang sử dụng Swift: Quá trình triển khai của bạn sẽ bị gián đoạn nếu bạn đang sử dụng cú pháp GMSPlaceField(rawValue:) làm hàm khởi tạo, các phiên bản cũ hơn của SDK được trả về dưới dạng GMSPlaceField? không bắt buộc. Phiên bản 4.0.0 trở lên trả về một giá trị GMSPlaceField không bắt buộc; mọi thao tác được thực hiện trên giá trị không bắt buộc, chẳng hạn như kiểm tra có điều kiện hoặc buộc mở gói, sẽ không thành công. Ngoài ra, giờ đây, bạn có thể sử dụng cú pháp mảng để kết hợp các GMSPlaceField

Di chuyển mã

Một số cú pháp mở gói có điều kiện hoặc buộc mở gói sẽ bị lỗi trong Swift. Các ví dụ sau đây cho biết cách khắc phục các vấn đề này, đồng thời minh hoạ cách sử dụng cú pháp mảng để khai báo GMSPlaceField:

Huỷ gói có điều kiện

Câu lệnh trong ví dụ sau đây cho thấy cách sử dụng if để tạo một mảng GMSPlaceField yêu cầu mở gói có điều kiện. Điều này sẽ dẫn đến lỗi trình biên dịch ("Trình khởi chạy cho liên kết có điều kiện phải có loại Không bắt buộc, chứ không phải GMSPlaceField").

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

Để khắc phục vấn đề này, hãy xoá câu lệnh if như minh hoạ dưới đây:

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

Bạn cũng có thể sử dụng cú pháp mảng như sau:

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

Buộc mở gói

Câu lệnh trong ví dụ sau đây cho thấy cách sử dụng GMSPlaceField làm loại không tuỳ chọn. Điều này sẽ dẫn đến lỗi trình biên dịch ("Không thể buộc mở gói giá trị của loại không bắt buộc GMSPlaceField"):

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

Để khắc phục vấn đề này, hãy sử dụng GMSPlaceField làm loại không bắt buộc, như minh hoạ tại đây:

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

Bạn cũng có thể sử dụng cú pháp mảng như sau:

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