Intereting Posts
как остановить Xcode iOS модульные тесты, если ударил fatalerror? Почему XCTestLog устарел в Xcode 6.1.1 / IOS 8? Как я могу скрыть нижнюю панель при нажатии, но оставаться в главном представлении Контроллер Ошибка установки модулей Firebase установки других модулей Размер пакета iOS увеличивается в два раза от добавленного размера образа запуска ios https и базовая аутентификация и почтовый запрос Предупреждение Xcode Analyzer – значение словаря не может быть nil переопределение UIManagedDocument -savingFileType Xcode 4.5: Объединить две статические библиотеки ,,, Отказ отказался JSQMessages Просмотр чата ViewController без создания дочернего элемента в базе данных iOS youtube совместно с родным диалогом Когда я отправляю изображение в Instagram из своего приложения, он напрямую открывается в раздел фильтрации Instagram, но я хочу, чтобы он открывал секцию обрезки Instagram? Могу ли я игнорировать предупреждение Cora Data относительно слишком многих атрибутов? Как извлечь выбранные атрибуты из объектов NSArray объектов Data Data и сформировать их в общую строку? Получите BackButton на UINavigationBar, говорящий «Назад», используя локализацию, определенную iOS

Обмен данными между классами через делегатов в Swift, iOS

Я пытаюсь узнать, как делегаты работают немного лучше в Swift и вообще. В примере, который я создал, у меня есть класс Sender класс Receiver . Я хочу отправить сообщение от Sender к Receiver

Затем я хочу создать экземпляр переменной класса Receiver и напечатать сообщение, отправленное ему Sender . Однако у меня возникают трудности, когда я вызываю функцию ShareMessage(message: NSString) из экземпляра переменной, который я создал var recieveMessage Мне нужно ввести другое сообщение или строку, и я не могу получить сообщение, отправленное ему классом отправителя.

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

 import UIKit // Protocol to send message between classes. protocol SendersMessageDelegate{ func shareMessage(message: NSString) } // Class that sends the message class Sender{ // Create variable to hold message var sendersMessage: NSString = NSString() var delegate: SendersMessageDelegate? = Receiver() // Grab the message when initialized and send to delegate init(sendersMessage: NSString){ self.sendersMessage = sendersMessage delegate?.shareMessage(sendersMessage) } } //Class receiving the message class Receiver: SendersMessageDelegate{ func shareMessage(message: NSString) { println(message) } } //Create variable instance of sender and send message in initializer. var sendMessage: Sender = Sender(sendersMessage: "Hello Receiver.") var receiveMessage: Receiver = Receiver() receiveMessage.shareMessage(message: NSString) <---- //Can't retrieve message as need new argument for function call. 

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

 receiveMessage.shareMessage(message: NSString) 

Я думаю, что вы немного перепутали свою логику.

Ваш отправитель настроен для создания Получателя сам по себе, а затем мгновенно отправляет ему сообщение о его создании.

Поэтому, когда в этой строке:

 var sendMessage: Sender = Sender(sendersMessage: "Hello Receiver.") 

Вы уже сделали то, что вы пытаетесь сделать в следующих двух строках. Если вы хотите, чтобы этот ресивер STORE отправил сообщение и для вас позже его получить, вам понадобится класс Receiver, чтобы сохранить его как переменную, а также распечатать.

 class Receiver: SendersMessageDelegate{ var savedMessage:NSString? func shareMessage(message: NSString) { savedMessage = message println(message) } } 

Затем вы можете получить доступ, выполнив следующие действия:

 var sharedMessage = receiver.savedMessage 

Второй вопрос, который у вас есть, состоит в том, что, поскольку вы создали приемник INSIDE your Sender, вам нужно вытащить ресивер из него.

 var sender: Sender = Sender(sendersMessage: "Hello Receiver.") var receiver:Receiver = sender.delegate var sharedMessage = receiver.savedMessage 

Это довольно странная вещь. Обычным шаблоном будет создание приемника и передача его отправителю. Затем вызовите функцию в отправителе, которая инициирует отправку сообщения в приемник. Вот так:

 import UIKit // Protocol to send message between classes. protocol SendersMessageDelegate{ func shareMessage(message: NSString) } // Class that sends the message class Sender{ // Create variable to hold message var sendersMessage: NSString = NSString() var delegate: SendersMessageDelegate? // Save the message that it needs to send init(sendersMessage: NSString){ self.sendersMessage = sendersMessage } // If it has as a delegate, then share the message with it. func sendMessage() { delegate?.shareMessage(sendersMessage) } } //Class receiving the message class Receiver: SendersMessageDelegate{ var savedMessage:NSString? func shareMessage(message: NSString) { savedMessage = message println(message) } } //Create Sender and Receiver var sender: Sender = Sender(sendersMessage: "Hello Receiver.") var receiver: Receiver = Receiver() //give Sender it's Receiver sender.delegate = receiver //Trigger the sender to send message to it's Receiver sender.sendMessage()