通过代表传递价值的问题

时间:2018-09-28 13:39:30

标签: swift delegates

我正在尝试通过委托传递一些价值,我认为我已经为此做好了一切,但我的价值没有传递,我感到困惑,为什么它没有传递。这是我创建协议的地方,

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

1 个答案:

答案 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