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, GMSPlaceField loại dữ liệu 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 object-C: thì sẽ không có tác dụng gì. 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ẽ có lỗi nếu bạn đang dùng cú pháp GMSPlaceField(rawValue:) làm hàm khởi tạo mà 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; bất kỳ thao tác nào được thực hiện trên tuỳ chọn, 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 đoạn mã

Một số cú pháp khám phá có điều kiện hoặc buộc khám phá có điều kiện sẽ bị lỗi trong Swift. Các ví dụ sau đây minh hoạ 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:

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 khám phá có điều kiện. Kết quả là trong 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ó tuỳ chọn loại, 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 một thuộc tính không phải loại 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 giá trị gỡ bao bọc thuộc loại GMSPlaceField không bắt buộc."):

// 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]