เริ่มตั้งแต่ Places SDK สำหรับ iOS เวอร์ชัน 4.0.0 เป็นต้นไป ตอนนี้ประเภท GMSPlaceField
จะใช้มาโคร NS_OPTIONS
SDK เวอร์ชัน 3.x มี GMSPlaceField
เป็น NS_ENUM
และยังคงรองรับอยู่
หากคุณใช้ Objective-C จะไม่มีผลกระทบใดๆ คุณยังคงใช้
GMSPlaceField
ได้ต่อไปเหมือนเดิมหากคุณใช้ Swift การติดตั้งใช้งานจะไม่สำเร็จหากคุณใช้ไวยากรณ์
GMSPlaceField(rawValue:)
เป็นตัวสร้าง ซึ่ง SDK เวอร์ชันเก่าแสดงผลเป็นGMSPlaceField?
ที่ไม่บังคับ เวอร์ชัน 4.0.0 ขึ้นไปจะแสดงผลค่าGMSPlaceField
ที่ไม่ไม่บังคับ การดำเนินการใดก็ตามที่ดำเนินการในตัวเลือกที่ไม่บังคับ เช่น การตรวจสอบแบบมีเงื่อนไขหรือบังคับการแยกจะไม่สำเร็จ นอกจากนี้ ตอนนี้คุณใช้ไวยากรณ์อาร์เรย์เพื่อรวมGMSPlaceField
การย้ายข้อมูลโค้ด
ไวยากรณ์การแยกตามเงื่อนไขหรือการบังคับให้แยกบางอย่างจะใช้งานไม่ได้ใน Swift
ตัวอย่างต่อไปนี้แสดงวิธีแก้ปัญหาเหล่านี้ และสาธิตการใช้ไวยากรณ์อาร์เรย์เพื่อประกาศ GMSPlaceField
การแยกตามเงื่อนไข
คำสั่งในตัวอย่างต่อไปนี้แสดงการใช้ if
เพื่อสร้างอาร์เรย์ GMSPlaceField
ที่ต้องใช้การแยกแบบมีเงื่อนไข ซึ่งจะส่งผลให้เกิดข้อผิดพลาดของคอมไพเลอร์ ("Initializer สำหรับการเชื่อมโยงแบบมีเงื่อนไขต้องมีประเภทที่ไม่บังคับ ไม่ใช่ GMSPlaceField
")
// Before.
if let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
) { // Do something }
หากต้องการแก้ไขปัญหานี้ ให้นำคำสั่ง if
ออกตามที่แสดงไว้ที่นี่
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
// Do something
คุณยังสามารถใช้ไวยากรณ์อาร์เรย์ได้ดังที่แสดงที่นี่
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]
บังคับแยก
คำสั่งในตัวอย่างต่อไปนี้แสดงการใช้ GMSPlaceField
เป็นประเภทที่ไม่ใช่ที่ไม่บังคับ ซึ่งจะทำให้เกิดข้อผิดพลาดของคอมไพเลอร์ ("ไม่สามารถบังคับให้แยกค่าของ GMSPlaceField เป็นประเภทที่ไม่ใช่ตัวเลือก")
// Before.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)!
หากต้องการแก้ไขปัญหานี้ ให้ใช้ GMSPlaceField
เป็นประเภทที่ไม่บังคับตามที่แสดงไว้ที่นี่
// After.
let field = GMSPlaceField(
rawValue: GMSPlaceField.name.rawValue | GMSPlaceField.photos.rawValue
)
คุณยังสามารถใช้ไวยากรณ์อาร์เรย์ได้ดังที่แสดงที่นี่
let field = [GMSPlaceField.name, GMSPlaceField.photos]
// or
let field: GMSPlaceField = [.name, .photos]