2017-01-02 6 views
-1

Как я понимаю, в Swift ArraySlice хранит ссылку на Array, из которого он был изготовлен. Как я могу получить доступ к элементам этого массива за пределами границ среза?Как получить доступ к элементам ArraySlice для родительских элементов?

Например, это ArraySlice есть свойство «родитель», что бы сделать следующий код для печати «А»:

func getSlicePrologue(_ slice: ArraySlice<String>) -> String { 
    return slice.parent[0] 
} 

func main() { 
    let array = ["A", "B", "C"] 
    let slice = array[1...2] 
    print(getSlicePrologue(slice)) 
} 

main() 

Если нет, то есть ли рекомендуемый способ - кроме отслеживания Array явно ? Или есть какая-то структура данных, более подходящая, чем Array?

+0

Я изменил код примера, чтобы сделать более очевидным, что родительский массив не должен быть напрямую доступен. –

+0

Но так как 'getSlicePrologue' является чистой фантазией и никогда не может быть на самом деле написан, этот пример не волшебным образом стал более привлекательным. Если вы хотите, чтобы другая функция имела доступ к 'array [0]', вы передадите ей 'array', а не' slice'. – matt

+0

Говорить, что моя фантазия невозможна, и почему, приветствуется; говоря, как делать то, что я специально хочу избежать, с другой стороны, просто добавляет шум в разговор. Фантазии _can_ быть написаны - вы читали мои выше. Я ожидаю, что более точное представление об этом может помочь уменьшить шум от осторожных читателей. –

ответ

1

Весь пункт фрагмента состоит в том, что это ограниченное окно на массиве. Говорить об использовании среза для доступа к индексу массива, который находится за пределами среза, является противоречием в терминах. В вашем примере:

let array = ["A", "B", "C"] 
let slice = array[1...2] 

... способ доступа нулевой элемент array является array[0].