การย้ายข้อมูลไปยัง GMSPlaceField เป็น NS_OPTIONS

เริ่มตั้งแต่ 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]