Nếu tôi có một mảng trong Swift và cố gắng truy cập vào một chỉ mục nằm ngoài giới hạn, có một lỗi thời gian chạy không đáng ngạc nhiên:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
Tuy nhiên, tôi đã nghĩ với tất cả các chuỗi tùy chọn và sự an toàn mà Swift mang lại, sẽ thật tầm thường khi làm một việc như:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
Thay vì:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
Nhưng đây không phải là trường hợp - tôi phải sử dụng if
câu lệnh ol ' để kiểm tra và đảm bảo chỉ số nhỏ hơn str.count
.
Tôi đã thử thêm subscript()
triển khai của riêng mình , nhưng tôi không chắc chắn làm thế nào để chuyển cuộc gọi đến triển khai ban đầu hoặc truy cập vào các mục (dựa trên chỉ mục) mà không sử dụng ký hiệu đăng ký:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}