ตั้งแต่เวอร์ชัน 4.0.0 ของ Places SDK สําหรับ iOS 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
ซึ่งต้องมีการแกะแพ็กเกจแบบมีเงื่อนไข ซึ่งจะส่งผลให้คอมไพเลอร์แสดงข้อผิดพลาด ("ตัวเริ่มต้นสำหรับเงื่อนไขการเชื่อมโยงต้องมีประเภท Optional ไม่ใช่ 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]