2015-07-16 4 views
2

Я новичок в программировании Swift и iOS.Реализация стека в Swift

Я пытаюсь проверить простой алгоритм и нужен массив стеков. Не нужно быть чем-то необычным (Stacks of Ints будут делать).

я получил реализацию стека из The Swift Programming Language documentation:

struct IntStack { 
    var items = [Int]() 
    mutating func push(item: Int) { 
     items.append(item) 
    } 
    mutating func pop() -> Int { 
     return items.removeLast() 
    } 
    mutating func count() -> Int { 
     return items.count 
    } 
    mutating func show() { 
     println(items) 
    } 
} 

Граф и показать функции мой вклад. Но когда я пытаюсь объявить массив стеков я получаю ошибку ...

var lines = IntStack()[5] 

«IntStack» не имеет член с именем подстрочного

Я предполагаю, что это что-то делать с OPTIONALS, но может выяснить, что это такое ...

любая помощь?

+0

'[5]' очевидно, что Свифт обозначает как индекс. Я не эксперт Swift, но обычно «индексы» требуют либо массива, либо настраиваемого объекта, к которому вы добавили индексатор, подобный массиву. –

ответ

1

Нет проблем с тем, что вы там делаете - это просто не синтаксис для объявления массива. Если вы хотите массив 5 стеков, вы можете сделать это:

[IntStack(), IntStack(), IntStack(), IntStack(), IntStack()] 

Или вы можете инициализировать массив так:

Array(count: 5, repeatedValue: IntStack()) 

Кроме того, вам не нужно, чтобы отметить свои функции, mutating, если они фактически не мутируют структуру - поэтому count() и show() не нуждаются в этом.

+0

Я не думаю, что вам нужно 'Repeat' здесь,' Array (count: 5, repeatValue: IntStack()) 'должен работать. –

+0

Ох, не знал об этом. Благодаря! – oisdk

+0

Спасибо, ребята! Я использовал: Array (count: 5, repeatValue: IntStack()) и удалил мутацию из count() и show() (никогда не использовал CMD + C CMD + V во время программирования), и это сработало! Этот синтаксис создания массива очень странный для меня, но я думаю, я понял. Еще раз спасибо!! –

3

Нет необходимости объявлять размер стека при его инициализации. Джуса, называющего это, должно быть достаточно.

var lines = IntStack() 

отметить также, что ваш счетчик() и шоу() методы не должны быть мутируют, так как они не изменяют структуры в любом случае.

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