คีย์เวิร์ด guard
นั้นยอดเยี่ยมมากและฉันก็ใช้มันมาตั้งแต่เปิดตัว Swift 2 ฉันสามารถใช้งานได้สำเร็จในหลาย ๆ สถานการณ์ รวมถึงสถานการณ์นี้ด้วย:
for viewController in self.navigationController!.viewControllers {
guard let myCustomVC = viewController as? MyCustomViewController else {continue}
myCustomVC.doWhatItHasToDo()
break
}
ทำงานเหมือนมีเสน่ห์ วนซ้ำทั้งหมด viewControllers
ในปัจจุบัน navigationController
จนกว่าจะพบสิ่งที่ฉันต้องการ
ปัญหาคือ: ตอนนี้ฉันต้องอัปเดตโค้ดด้านบนเพื่อใช้ตัวแปร myCustomVC
ซ้ำนอกขอบเขต for..in
มันควรจะง่ายพอๆ กับการประกาศตัวแปรก่อนขอบเขต แต่ฉันไม่สามารถหาวิธีในการกำหนดตัวแปร guard
ได้หากไม่มีคีย์เวิร์ด let
หรือ var
รหัส สมมุติ ต่อไปนี้แสดงให้เห็นถึงสิ่งที่ฉันพยายามทำให้สำเร็จ แต่ Swift จะไม่ยอมให้ฉันทำเช่นนั้น:
var myCustomVC: MyCustomViewController
for viewController in self.navigationController!.viewControllers {
guard myCustomVC = viewController as? MyCustomViewController else {continue}
myCustomVC.doWhatItHasToDo()
break
}
// Now myCustomVC is available outside the for...in scope
myCustomVC.doWhatever()
Xcode แนะนำให้ใช้ ==
แทน =
เนื่องจากคาดว่าคำสั่ง guard
จะเป็นบริบทบูลีนแทนที่จะเป็นการกำหนดตัวแปร
มีความคิดเห็นเกี่ยวกับวิธีการแก้ไขปัญหานี้หรือไม่?