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