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ó GMSPlaceField
là NS_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ạngGMSPlaceField?
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ácGMSPlaceField
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]