2015-01-16 2 views
0

Глупый новичок Swift вопрос: Я ожидаю следующие 3 строки кода для работы на площадке:Изменение содержимого неизменного массива в Swift не работает

let items = ["Apple", "Orange", "Pear"] 
items[1] = "Banana" // error here 
items 

Теперь ошибка

error: '@lvalue $T5' is not identical to 'String' 
items[1] = "Banana" 

Мое понимание, что обновление содержимого неизменяемо массив возможен в Swift. Я использую XCODE 6.1.1

Любая идея, что здесь происходит?

Благодаря

Основываясь на этой теме это было возможно в предыдущих версиях: Why in immutable array in swift value can be changed?

+0

Неизменное обычно означает только читать, я не знаю, почему вы могли бы мутировать (написать) непреложный массив – reggaeguitar

+0

https://developer.apple.com/library/mac/documentation/ Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html - «если вы назначаете массив или словарь константе, этот массив или словарь неизменен, а его размер и содержимое не могут быть изменены». –

+0

https://itunes.apple.com/us/book/swift-programming-language/id881256329?isInPurchasedView=true&mt=11 –

ответ

1

Когда вы пишете let, вы определяете неизменяемый переменную. Вместо этого используйте var; это позволяет вам определить переменную, которая изменена.

0

Использование ключевого слова let объявляет Константа. По определению константу нельзя изменить.

Вы хотите использовать var ключевое слово, чтобы объявить Переменная, следовательно, то, что будет/может варьироваться.

Из яблока Swift документации:

константы и переменные

Константы и переменные ассоциировать имя (например, как maximumNumberOfLoginAttempts или welcomeMessage) со значением в определенного типа (например, число 10 или строка «Hello»). Значение константы не может быть изменено после его установки, тогда как переменная может быть установлена ​​на другое значение в будущем.

Объявление констант и переменных

Константы и переменные должны быть объявлены до их использования. Вы объявляете константы с ключевыми словами let и переменными с ключевым словом var . Вот пример того, как константы и переменные могут быть использованы для отслеживания числа попыток входа пользователь сделал:

Пусть maximumNumberOfLoginAttempts = 10

вар currentLoginAttempt = 0

1

, как было сказано выше меня - используйте массив var, если вы хотите изменить свой массив.

немного ниже вопроса вы разместили ссылку и ответ был дан в:

массив в Swift был полностью переработан, чтобы иметь полное значение семантики как словарь и строки всегда имела в Swift. Этот устраняет различные проблемы с изменением - теперь массив «let» полностью неизменный, а массив «var» полностью изменен - ​​правильно составлен с помощью словаря и строки и решает другие более глубокие проблемы. Значение семантика может быть удивительной, если вы привыкли к массивам NSArray или C: копия массива теперь производит полную и независимую копию всех элементов , используя эффективную реализацию ленивой копии. Это основное изменение для массива , и все еще есть проблемы с производительностью до . Пожалуйста, ознакомьтесь с языком быстрого программирования для получения дополнительной информации . (17192555)

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