যদি আমার সুইফটে একটি অ্যারে থাকে এবং সীমার বাইরে থাকা একটি সূচকটি অ্যাক্সেস করার চেষ্টা করি তবে একটি আশ্চর্যজনক রানটাইম ত্রুটি রয়েছে:
var str = ["Apple", "Banana", "Coconut"]
str[0] // "Apple"
str[3] // EXC_BAD_INSTRUCTION
যাইহোক, আমি সুইফট যে সমস্ত alচ্ছিক শৃঙ্খলা এবং সুরক্ষা নিয়ে আসে তা নিয়ে ভাবতাম , এমন কিছু করা তুচ্ছ হবে:
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?
}
}