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ó 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ột GMSPlaceField? 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ợp GMSPlaceField

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]