Here’s my example usage of delegate programmatically. The code passes a message from one view to other view controller. I have two view SendMessageController and Receive message controller. It’s passing data back scenario.
Protocol is defined in SendMessageController.
protocol SendMessageDelegate: AnyObject {
func message(text: String)
}
final class SendMessageController: UIViewController {
weak var delegate: SendMessageDelegate?
@objc func button() {
sendMessage()
}
func sendMessage() {
let message = “Hello World”
delegate?.message(text: message)
print("Delegate is :\(delegate)")
print("self:\(self)")
}
In Show Message View Controller which receives message:
final class ShowMessageController: UIViewController,SendMessageDelegate {
let sendMessageController = SendMessageController()
override func viewDidLoad() {
sendMessageController.delegate = self
print("\(sendMessageController)")
}
func message(text: String) {
print(“The message is:\(text)”)
}
}
The delegates prints nil, and memory address of print(self) is different than print(“(sendMessageController)”).
I had use delegate before where memory adress of SendVC were same, don’t know what is happening here.




