简体   繁体   English

Swift:ProtocolDelegate可选值错误

[英]Swift: ProtocolDelegate optional value error

I want to delegate some tasks to the AcceptController, but my delegate property inside of 'SendController' always returns nil, so no delegation will ever be executed. 我想将一些任务委托给AcceptController,但是我在'SendController'内部的委托属性始终返回nil,因此将永远不会执行委托。 I just can't figure out why my delegate property 'übergabeDelegate' always returns nil. 我只是不知道为什么我的委托属性'übergabeDelegate'总是返回nil。

protocol ÜbergabeDelegate {
    func übergebeText(text: String)
}

class SendController: UIViewController {
    @IBOutlet weak var textField: UITextField!

    var übergabeDelegate: ÜbergabeDelegate?

    @IBAction func save(_ sender: UIButton) {
        if let text = textField.text {
            if übergabeDelegate != nil {
                übergabeDelegate!.übergebeText(text: text)
            } else {
                print("\nübergabeDelegate is nil\n")
            }
        }
    }
}

class AcceptController: UIViewController {
    @IBOutlet weak var label: UILabel!

    let sendController = SendController()

    override func viewDidLoad() {
        super.viewDidLoad()


        sendController.übergabeDelegate = self
        //print("Delegate gesetzt")
    }
}

extension AcceptController: ÜbergabeDelegate {
    func übergebeText(text: String) {
        label.text = "\(text)"
    }
}

I expect the label to present the input I gave on my SendController but the text of the label never actually changes. 我希望标签显示我在SendController上提供的输入,但是标签的文本永远不会实际更改。

inside viewDidLoad let sendController = SendController() creates a local variable. viewDidLoad内部, let sendController = SendController()创建一个局部变量。 the sendController will then be released after viewDidLoad returns. viewDidLoad返回后,将释放sendController set the sendController as a property of the AcceptController and the delegate will persist when you assign it because the SendController object will not be released after viewDidLoad returns. 设置sendController为的属性AcceptController ,当你分配给它,因为委托将持续SendController对象之后不会被释放viewDidLoad的回报。

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

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