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
dưới dạng NS_ENUM
và vẫn được hỗ trợ.
Nếu bạn đang sử dụng Objective-C: thì sẽ 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: Quá trình triển khai sẽ bị lỗi nếu bạn sử dụng cú pháp
GMSPlaceField(rawValue:)
làm hàm khởi tạo (các phiên bản SDK cũ hơn được trả về dưới dạng mộtGMSPlaceField?
không bắt buộc). Phiên bản 4.0.0 trở lên sẽ 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 lựa chọn không bắt buộc, chẳng hạn như kiểm tra có điều kiện hoặc buộc mở khoá đều 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ợpGMSPlaceField
Di chuyển mã
Một số cú pháp khám phá hoặc buộc khám phá có điều kiện 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, cũng như minh hoạ việc sử dụng cú pháp mảng để khai báo GMSPlaceField
:
Khám phá có điều kiện
Câu lệnh trong ví dụ sau cho thấy việc sử dụng if
để tạo một mảng GMSPlaceField
yêu cầu phải khám phá 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 Tuỳ chọn, 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ư minh hoạ dưới đây:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
Buộc khám phá
Câu lệnh trong ví dụ sau cho thấy việc sử dụng GMSPlaceField
làm kiểu không bắt buộc. Điều này sẽ dẫn đến lỗi trình biên dịch ("Không thể buộc khám phá 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ạ dướ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ạ dưới đây:
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]