यदि मेरे पास स्विफ्ट में एक सरणी है, और एक सूचकांक का उपयोग करने की कोशिश करते हैं, जो सीमा से बाहर है, तो एक अप्रत्याशित परिणाम है:
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?
}
}