Kể từ phiên bản 4.0.0 của Places SDK cho iOS, loại GMSPlaceField
hiện sử dụng macro NS_OPTIONS
. SDK phiên bản 3.x có GMSPlaceField
là NS_ENUM
và vẫn được hỗ trợ.
Nếu bạn đang sử dụng Objective-C: không có tác động nào. Bạn có thể tiếp tục sử dụng
GMSPlaceField
như trước đây.Nếu bạn đang sử dụng Swift: Cách 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ũ của SDK đã trả về cú pháp này dưới dạngGMSPlaceField?
không bắt buộc. Phiên bản 4.0.0 trở lên trả về 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 mở gói bắt buộc sẽ bị lỗi trong Swift.
Các ví dụ sau đây cho thấy cách khắc phục những vấn đề này, đồng thời minh hoạ cách sử dụng cú pháp mảng để khai báo GMSPlaceField
:
Tháo 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 tạo cho liên kết có điều kiện phải có loại Không bắt buộc, 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ạ ở đâ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ư minh hoạ ở đây:
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 bắt buộc. Điều này sẽ dẫn đến lỗi trình biên dịch ("Cannot force unwrap value
of non-optional type GMSPlaceField."):
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
Để khắc phục vấn đề này, hãy 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ư minh hoạ ở đây:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]