【发布时间】:2019-04-04 10:52:33
【问题描述】:
我已经建立了一个简单的 Swift 项目来尝试将我的头脑围绕在委托和协议上。目标是在两个类之间传递数据(SendingClass & ReceivingClass)。 SendingClass 中的两个按钮链接到委托,委托应该触发 ReceivingClass 中的符合协议的函数来执行。不幸的是,这不起作用,我怀疑它与我在哪里以及如何将 ReceivingClass 声明为代表有关。
感谢您的见解,我才刚刚开始!
我已尝试将代理设置在不同的位置(目前在 viewDidLoad 内,但无法正常工作)。
let vc = SendingClass()
vc.statusDelegate = self
SendingClass.swift
import UIKit
protocol StatusDelegate {
func statusChanged(state: Bool, sender: String)
}
class SendingClass: UIViewController {
var statusDelegate : StatusDelegate?
@IBAction func button1Pressed(_ sender: UIButton) {
statusDelegate?.statusChanged(state: true, sender: "Button 1")
}
@IBAction func button2Pressed(_ sender: UIButton) {
statusDelegate?.statusChanged(state: false, sender: "Button 2")
}
}
ReceivingClass.swift
import Foundation
import UIKit
class ReceivingClass: UIViewController, StatusDelegate {
override func viewDidLoad() {
let vc = SendingClass()
vc.statusDelegate = self
}
func statusChanged(state: Bool, sender: String) {
print("Sender = \(sender) , State = \(state)")
}
}
预期:每次在 SendingClass 中按下按钮时,都应执行符合 ReceivingClass 协议的函数 (func statusChanged)。
实际:什么都没有发生
【问题讨论】:
-
你如何展示你的
SendingClass?在 IBActions 中,我猜你是从情节提要中完成的。 -
你在哪里展示
SendingClass? -
@Dávid Pásztor, @Rico Crescenzio 是的,按钮是通过一个简单的故事板呈现的。我已经用 print 语句测试了 IBactions,它们似乎工作正常。
-
@GCr 我的回答对你有帮助吗?