หากฉันมีอาร์เรย์ใน Swift และพยายามเข้าถึงดัชนีที่อยู่นอกขอบเขตแสดงว่ามีข้อผิดพลาดรันไทม์ที่ไม่น่าแปลกใจ:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
อย่างไรก็ตามฉันจะคิดด้วยการผูกมัดและความปลอดภัยเสริมทั้งหมดที่ Swift นำมามันคงเป็นเรื่องไม่สำคัญที่จะทำอะไรเช่น:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
แทน:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
แต่นี่ไม่ใช่กรณี - ฉันต้องใช้if
คำสั่งol ' เพื่อตรวจสอบและให้แน่ใจว่าดัชนีนั้นน้อยกว่าstr.count
คำสั่งให้ตรวจสอบและให้แน่ใจว่าดัชนีมีค่าน้อยกว่า
ฉันพยายามเพิ่มsubscript()
การใช้งานของตัวเองแต่ฉันไม่แน่ใจว่าจะส่งการเรียกไปยังการใช้งานดั้งเดิมหรือเข้าถึงรายการ (ตามดัชนี) ได้อย่างไรโดยไม่ต้องใช้เครื่องหมายตัวห้อย:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}