Swift bir dizi varsa ve sınırları dışında bir dizine erişmeye çalışırsanız, şaşırtıcı bir çalışma zamanı hatası var:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
Ancak, Swift'in getirdiği tüm isteğe bağlı zincirleme ve güvenlikle düşünürdüm, şöyle bir şey yapmak önemsiz olurdu:
let theIndex = 3
if let nonexistent = str[theIndex] { // Bounds check + Lookup
print(nonexistent)
...do other things with nonexistent...
}
Onun yerine:
let theIndex = 3
if (theIndex < str.count) { // Bounds check
let nonexistent = str[theIndex] // Lookup
print(nonexistent)
...do other things with nonexistent...
}
Ama durum böyle değil - ben end if
ifadesinin daha az olduğundan emin olmak ve kontrol etmek için ol ifadesini kullanmalıyım str.count
.
Kendi subscript()
uygulamamı eklemeyi denedim , ancak çağrıyı orijinal uygulamaya geçirmek veya alt simge gösterimi kullanmadan öğelere (dizin tabanlı) erişmek için nasıl emin değilim:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}