Intereting Posts
Основная функция DispatchQueue не называется выноска аннотации пользовательских карт – как управлять шириной Каков самый простой способ сделать двумерную таблицу на iOS? Объект MFMailComposerViewController не получает выделение в iPad, но отлично работает в симуляторе Можно ли получить, какой класс выбрал исключение? У всех установленных устройств iOS 6 есть камера? Есть ли способ перетаскивать элементы UITableView вверх и вниз, чтобы изменить их порядок? Как работает MDM в IOS? CocoaPods Swift Unresolved Identifier Представление модального пейзажа Просмотр контроллера с портрета View Controller Как получить NSUserDefaults из командной строки Вызов функции C в блоке Objective-C (ошибка компоновщика) Как проверить, пуст ли ключ анализа? Если это так, измените его на 0, а затем ничего не получите Пользовательский интерфейс SiriKit Intents – Как использовать INImage? Является ли цифровая подпись шифрованием?

Каков правильный способ использования геттеров / сеттеров

Приветствия,

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

Мой запрос таков: на данный момент у меня есть две функции IBActions, которые пустые, не имеют какого-либо кода, и их единственная цель для существования состоит в том, что они связаны с моим другим контроллером представления, и как таковой, если я удалю их, у меня нет способ различать между тем, какой segue следует использовать (я понимаю, что, хотя мы можем создавать сегменты между двумя контроллерами представлений, я не думаю, что что-то большее, чем одно имеет смысл (как, как решить, с кем идти). отвлекся.

Я пробовал использовать в своем коде следующее:

self.performSegue(withIdentifier: "slideTwo", sender: self); 

Это хорошо работает, однако, это вызывает двойное переключение. Поэтому я решил:

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let passedPic = segue.destination as! ViewControllerTwo; if(segue.identifier == "slideOne") { passedPic.picsChosen = sLS1; } else { passedPic.picsChosen = sLS2; } } 

Это хорошо работает, делает то, что мне нужно, но у меня есть проблема двух пустых IBActions:

 @IBAction func slideShowOne() { } @IBAction func slideShowTwo() { //self.performSegue(withIdentifier: "slideTwo", sender: self); } 

Здесь я подумал, что, возможно, я мог бы попытаться создать геттер / сеттер (который быстро делает намного сложнее, чем это должно быть честно). Здесь я потерялся.

Код выглядит следующим образом:

 var picsChosen : [String] { set(newData) { for index in 0..<newData.count { print("Index is: ", newData[index]); } self._picsChosen = newData; } get { return self._picsChosen; } } 

Теперь моя проблема в два раза. Во-первых, каков правильный способ доступа и передачи значений в мою переменную. Я пробовал делать: myClass: ViewControllerTwo! = ViewControllerTwo(); myClass: ViewControllerTwo! = ViewControllerTwo();

а затем используйте myClass.picsChosen = myArray; Однако, хотя кажется, что данные были успешно переданы в мой VC2, поскольку, когда я прохожу через (внутри сеттера), я вижу, что значения успешно отображаются, когда я пытаюсь получить доступ к picsChosen за пределами этого, я получаю индекс из другими словами, значение никогда не ассоциировалось с picsChosen . Текущий способ, который у меня есть, хорошо работает, но я хочу знать, как правильно использовать геттеры / сеттеры, и почему то, что у меня не получилось.

Ура!

Это хорошо работает, делает то, что мне нужно, но у меня есть проблема двух пустых IBActions:

Вам не нужны эти пустые @IBAction s. Они ничего не делают для вас. Сегеры связаны с кнопками в Раскадке, поэтому вам не нужны @IBAction . Если вы удаляете код, вам также необходимо удалить соединение с раскадровки, или ваше приложение @IBAction крах при @IBAction вызвать удаленные @IBAction s. Чтобы удалить, нажмите «Ctrl» на кнопках в раскадровке, а затем нажмите маленький x рядом с « Touch Up Inside», чтобы удалить соединение. Затем вы можете удалить @IBAction в своем коде.

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

Не правда. У вас есть два разных сегмента, связанных с двумя разными кнопками. Идентификаторы segue – это то, как вы проводите различие между двумя сегментами.

Я пробовал делать: myClass: ViewControllerTwo! = ViewControllerTwo(); myClass: ViewControllerTwo! = ViewControllerTwo();

При использовании segue, segue создает для вас viewController назначения. Это не работает, потому что вы создаете совершенно новый ViewControllerTwo здесь. Вы передаете значения этому новому экземпляру, но это не ViewControllerTwo что созданный для вас ViewControllerTwo Storyboard.

При использовании segues вы должны передать данные в процессе prepare(for:sender:) , как показано выше. Получите целевой ViewController и заполните данные, которые вы хотите передать.

И теперь на вопрос вы не спросили:

Как я мог это сделать, используя @IBAction s для запуска segue?

  1. Удалите сегменты, которые связаны с вашими кнопками.

  2. Проводьте segue из viewController1 в viewController2. Нажмите стрелку slideShow в раскадровке и назначьте slideShow шоу идентификатора.

  3. Назначьте уникальные теги для двух кнопок. Вы можете установить это в Interface Builder . Дайте первый тег кнопки 1 и второй тег кнопки 2 .

  4. Ваши кнопки могут использовать один и тот же @IBAction :

     @IBAction func goToSlideShow(button: UIButton) { self.performSegue(withIdentifier: "slideShow", sender: button) } 
  5. В prepare(for:sender:) :

     override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let passedPic = segue.destination as! ViewControllerTwo if let button = sender as? UIButton { if button.tag == 1 { passedPic.picsChosen = sLS1 } else if button.tag == 2 { passedPic.picsChosen = sLS2 } } }