我正在尝试通过委托传递一些价值,我认为我已经为此做好了一切,但我的价值没有传递,我感到困惑,为什么它没有传递。这是我创建协议的地方,
protocol VideoCallDelegate {
func videoCallLog(name : String, number: String)
}
var delegate : VideoCallDelegate?
@IBAction func disconnectCallBtnTapped(_ sender: Any) {
delegate?.videoCallLog(name: channelName!, number: otherUserNumber!)
}
在我的目标vc中,我这样称呼它,
class ContainerCallVC: UIViewController,VideoCallDelegate
func videoCallLog(name: String, number: String) {
print(name)
nameArray.append(name)
numberArray.append(number)
}
答案 0 :(得分:1)
您的问题是这个
var delegate : VideoCallDelegate?
是nil
,所以当您调用此
delegate?.videoCallLog(name: channelName, number: otherUserNumber)
什么都没有发生,因此请确保在将其用于firstVC之前将其设置为委托,另外如果您要强制展开,则最好从头开始声明为
func videoCallLog(name : String, number: String)
编辑1:,当您显示ContainerCallVC
中的第二个VC时,应该有这样的一行
let secondVc = //
secondVc.delegate = self
无论您采用哪种方式进行推送/ segue / present
编辑2 :
在这里,我想调用位于第一个选项卡的viewDidLoad
内的选项卡2上
let call = self.tabBarController!.viewControllers[1] as! VideoCallVC
call.delegate = self