यदि मेरे पास स्विफ्ट में एक सरणी है, और एक सूचकांक का उपयोग करने की कोशिश करते हैं, जो सीमा से बाहर है, तो एक अप्रत्याशित परिणाम है:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
हालाँकि, मैंने सोचा था कि स्विफ्ट लाने वाली सभी वैकल्पिक चेनिंग और सुरक्षा के साथ , यह कुछ करने के लिए तुच्छ होगा:
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सूचकांक की जांच करने और यह सुनिश्चित करने के लिए कि सूचकांक से कम है का उपयोग करना होगा str.count।
मैंने अपने स्वयं के subscript()कार्यान्वयन को जोड़ने की कोशिश की , लेकिन मुझे यकीन नहीं है कि मूल कार्यान्वयन के लिए कॉल कैसे पास किया जाए, या सबस्क्रिप्ट नोटेशन का उपयोग किए बिना आइटम (इंडेक्स-आधारित) का उपयोग किया जाए:
extension Array {
subscript(var index: Int) -> AnyObject? {
if index >= self.count {
NSLog("Womp!")
return nil
}
return ... // What?
}
}