TL; DR
popViewController(animated:)
ผลตอบแทนUIViewController?
และคอมไพเลอร์ให้คำเตือนนั้นเพราะคุณไม่ได้เก็บค่า ทางออกคือการกำหนดให้ขีดล่าง:
_ = navigationController?.popViewController(animated: true)
Swift 3 Change
ก่อนที่ Swift 3 วิธีการทั้งหมดจะมี "ผลลัพธ์ที่ถูกทิ้ง" โดยค่าเริ่มต้น ไม่มีคำเตือนเกิดขึ้นเมื่อคุณไม่ได้จับภาพสิ่งที่วิธีการกลับมา
เพื่อบอกคอมไพเลอร์ว่าควรจับผลลัพธ์คุณต้องเพิ่ม@warn_unused_result
ก่อนการประกาศเมธอด มันจะใช้สำหรับวิธีการที่มีรูปแบบที่ไม่แน่นอน (เช่นsort
และsortInPlace
) คุณจะเพิ่ม@warn_unused_result(mutable_variant="mutableMethodHere")
เพื่อบอกคอมไพเลอร์ของมัน
อย่างไรก็ตามด้วย Swift 3 พฤติกรรมจะถูกพลิก วิธีการทั้งหมดในขณะนี้เตือนว่าค่าตอบแทนจะไม่ถูกจับ ถ้าคุณต้องการบอกคอมไพเลอร์ว่าไม่จำเป็นต้องเตือนคุณเพิ่ม@discardableResult
ก่อนการประกาศวิธีการ
หากคุณไม่ต้องการใช้ค่าส่งคืนคุณต้องบอกคอมไพเลอร์อย่างชัดเจนด้วยการกำหนดให้ขีดล่าง:
_ = someMethodThatReturnsSomething()
แรงจูงใจในการเพิ่มสิ่งนี้ลงใน Swift 3:
- การป้องกันข้อผิดพลาดที่อาจเกิดขึ้น (เช่นการใช้
sort
ความคิดจะปรับเปลี่ยนการรวบรวม)
- ความตั้งใจอย่างชัดแจ้งที่จะไม่จับภาพหรือต้องการจับผลลัพธ์สำหรับผู้ทำงานร่วมกันคนอื่น ๆ
UIKit API ดูเหมือนว่าจะไม่สามารถเพิ่มการ@discardableResult
ใช้งานปกติได้อย่างสมบูรณ์แบบ (หากไม่ใช่เรื่องธรรมดา) popViewController(animated:)
โดยไม่ต้องจับค่าส่งคืน
อ่านเพิ่มเติม