สำหรับSwift 2และใหม่กว่า:
สวิฟท์ 2 เพิ่มรูปแบบกรณีไปสำหรับลูปซึ่งจะทำให้มันง่ายยิ่งขึ้นและปลอดภัยในการพิมพ์หล่อในสำหรับวง:
for case let button as AClass in view.subviews {
// do something with button
}
เหตุใดสิ่งนี้จึงดีกว่าสิ่งที่คุณทำได้ในSwift 1.2และรุ่นก่อนหน้า เนื่องจากรูปแบบเคสช่วยให้คุณสามารถเลือกประเภทเฉพาะของคุณจากคอลเล็กชันได้ ตรงกับประเภทที่คุณกำลังมองหาเท่านั้นดังนั้นหากอาร์เรย์ของคุณมีส่วนผสมคุณสามารถใช้งานได้เฉพาะบางประเภทเท่านั้น
ตัวอย่างเช่น:
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
เอาท์พุท:
Hello
World!
สำหรับSwift 1.2 :
ในกรณีนี้คุณกำลังแคสต์view.subviews
ไม่ใช่button
ดังนั้นคุณต้องดาวน์แคสต์เป็นอาร์เรย์ของประเภทที่คุณต้องการ:
for button in view.subviews as! [AClass] {
// do something with button
}
หมายเหตุ: หากไม่ใช่ประเภทอาร์เรย์พื้นฐานการดำเนินการ[AClass]
นี้จะผิดพลาด นั่นคือสิ่งที่!
ออนas!
กำลังบอกคุณ หากคุณไม่แน่ใจเกี่ยวกับประเภทคุณสามารถใช้การร่ายแบบมีเงื่อนไขas?
ร่วมกับการผูกเพิ่มเติมได้if let
:
if let subviews = view.subviews as? [AClass] {
// If we get here, then subviews is of type [AClass]
for button in subviews {
// do something with button
}
}
สำหรับSwift 1.1และรุ่นก่อนหน้า:
for button in view.subviews as [AClass] {
// do something with button
}
หมายเหตุ: สิ่งนี้จะขัดข้องเช่นกันหากมุมมองย่อยไม่ใช่ประเภทAClass
ทั้งหมด วิธีการที่ปลอดภัยที่ระบุไว้ข้างต้นยังใช้ได้กับ Swift เวอร์ชันก่อนหน้า
for button in view.subviews as [AClass]