2015-03-17 3 views
12

Есть ли способ, аналогичный использованию if let и/или optionals, чтобы проверить, собираетесь ли вы индексировать пустой буфер в Swift?Как предотвратить ошибку «Индекс массива вне диапазона»?

+0

Определить «буфер»? –

+0

Я не знаю, что это значит. Это ошибка, которую я получаю, когда пытаюсь получить доступ к индексу массива, который еще не существует; слишком высоко. Массив может содержать 10 элементов, но приложение пытается получить доступ к 11-му. – webmagnets

+0

Итак, это массив, проверьте границы массива, используя свойство count ('array.count'). GoZoner дает пример в своем ответе. –

ответ

14

Определите ваши собственные:

extension Array { 
    func ref (i:Int) -> T? { 
    return 0 <= i && i < count ? self[i] : nil 
    } 
} 

ref() функция возвращает необязательный, поэтому он может быть nil, и вы можете использовать синтаксис if let для доступа к возвращаемое значение из ref(), когда он существует. Вы использовали бы это как таковое:

var myA = [10,20,30] 
if let val = myA.ref(index) { 
    // Use 'val' if index is < 3 
} 
else { 
    // Do this if the index is too high 
} 
+1

Я не очень хорошо это понимаю. Можете ли вы показать мне, как использовать его и, может быть, что он делает? – webmagnets

+0

Большое спасибо. – webmagnets

+0

Я думаю, что ref нуждается в лучшем имени. Но я не мог подумать. – osrl

Смежные вопросы