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

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