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