[英]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.