Вызовите строку как массив - PullRequest
0 голосов
/ 13 мая 2018

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

У меня есть array of 20 arrays, который совпадает с моим array of 20 strings, когда при нажатии кнопки массив меняет имя выбранной кнопки, я могу очень легко изменить его на строку с помощью:

newArray = oldArray[0]

Но не могу найти способ вставить имя строки в качестве имени нового массива, если у кого-нибудь есть совет, я был бы рад, спасибо!

newArray = [oldArray[0]]

Просто создает массив с одной строкой, я искал функцию что-то вроде:

newArray = Array(named: oldArray [0])

но не уверен, существует ли он.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Это не ответ как таковой, вы не предоставили достаточно подробностей для этого, но давайте посмотрим, сможем ли мы помочь вам на правильном пути.Вы писали:

Я искал что-то вроде:

newArray = Array(named: oldArray [0])

Это не существует, потому что массивы (и другие значения) не имеют имена .Вы, кажется, путаете имена и значения переменных, это очень разные вещи.Например, выражение:

[0, 1, 8, 27, 64]

создает массив value , содержащий пять элементов, у него нет name , это просто значение.Значение может быть присвоено переменной:

var cubes = [0, 1, 8, 27, 64]

Теперь у нас есть переменная с name cubes, текущее значение которой является массивом.Вышеприведенный оператор объявил переменную cubes, присвоил ей тип [Int] и присвоил ей начальное значение [0, 1, 8, 27, 64].Он не назвал значение, значение может быть скопировано в другую переменную:

var anotherVariable = cubes

После вышеперечисленного у вас есть две переменные, cubes и anotherVariable, каждая из которых в настоящее время имеет одинаковое значение.Значения не shared , вы можете изменить одно из значений:

anotherVariable[0] = 42

и теперь anotherVariable содержит значение [42, 1, 8, 27, 64], в то время как cubes все ещесодержит значение [0, 1, 8, 27, 64].

ОК, вернемся к вашему вопросу, вы написали:

У меня есть array of 20 arrays, который совпадает с моим array of 20 strings ...

То, что вы описываете, выглядит примерно так:

var myArrays = [ [0, 1, 4, 9, 16], [0, 1, 8, 27, 64] ]
var myNames = [ "squares", "cubes" ]

и у вас есть кнопки с метками squares и cubes.Похоже, вы пытаетесь перейти от щелчка по кнопке к элементу myArrays через массив myNames - отсюда и происходит «именование» значений.

Для сопоставления"имя" для "массива", вы должны использовать словарь , который представляет собой набор ключей, ваши имена, значения, ваши массивы:

let myCollection = [ "squares":[0, 1, 4, 9, 16], "cubes":[0, 1, 8, 27, 64] ]

Это объявляет константу (использование let, а не var) словаря, ключами которого являются строки и массивы значений.Таким образом, у вас фактически есть коллекция «именованных массивов».

Теперь вы можете выбрать массив для этой коллекции по имени, используя следующую инструкцию:

var currentArray = myCollection[currentButtonTitle]

где currentButtonTitleранее было установлено название кнопки, на которую вы нажали.

HTH

0 голосов
/ 13 мая 2018

Если вы хотите вставить какой-то конкретный индекс, используйте insert, например:

var newArr = [String]()
newArr.insert("jogendar", at: 0) /// Removes and returns the element at the specified position.

. Если вы хотите добавить в конце, используйте append, например:

var newArr = [String]()
newArr.append("jogendar") ///Adds the elements of a sequence to the end of the array.

Если вы хотите изменить имя кнопки при выборе, вам не нужно поддерживать массив, вы можете установить заголовок кнопки для таких состояний, как это:

let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
btn.setTitle("jogendar_defautl", for: UIControlState.normal)
btn.setTitle("jogendar_selected", for: UIControlState.selected)

Иесли вы хотите выбрать кнопку, то имя кнопки автоматически изменяется в соответствии с выбранным состоянием:

btn.isSelected = !btn.isSelected
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...