繁体   English   中英

在iOS,Swift中通过委托在类之间共享数据

[英]Sharing data between classes via delegates in Swift, iOS

我试图了解代表在Swift以及一般情况下的工作情况。 在创建的示例中,我有一个Sender类和一个Receiver类。 我想从SenderReceiver发送消息

然后,我想创建Receiver类的变量实例,并打印Sender发送给它的消息。 但是,当我从已创建的var recieveMessage变量实例中调用函数ShareMessage(message: NSString)时,遇到了var recieveMessage我必须键入其他消息或字符串,而且无法检索Sender类发送给它的消息。

这是我正在使用的代码。 我不确定我要问的内容是否正确,但是我只是很好奇如何获取变量实例中的数据。

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.")

您已经完成了接下来两行中要执行的操作。 如果要让此接收者存储该消息并供以后检索,则需要Receiver类将其保存为变量并打印出来。

class Receiver: SendersMessageDelegate{

    var savedMessage:NSString?

    func shareMessage(message: NSString) {
        savedMessage = message
        println(message)
    }
}

然后,您可以通过执行以下操作进行访问:

var sharedMessage = receiver.savedMessage

但是,您遇到的第二个问题是,因为您已在发件人内部创建了接收方,所以您需要从接收方中拉出接收方。

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM