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:)โดยไม่ต้องจับค่าส่งคืน
อ่านเพิ่มเติม