我的代码可以正常工作,但是我不知道为什么能工作。
拥有此prepareForSegue函数不起作用,并且在prepareForSegue转到的viewController中调用我的变量时,它将返回nil。
原始的VC:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == K.latinSegue {
if latinTextField.text != nil && latinTextField.text != "" {
guard let latinText = latinTextField.text else { fatalError("latinText broken")}
let destinationVC = LatinViewController()
destinationVC.latinText = latinText
}
}
}
destinationVC:
var latinText: String?
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
let latinTranslator = LatinTranslator()
let latinDefinition = latinTranslator.getHTMLAndDefinition(latinText: **latinText!**)
textLabel.text = latinDefinition
}
latinText!即使我在prese for segue函数中设置了它的值,在这里对其进行强行包装时也没有值。
现在,此代码有效。我有点知道静态变量是如何工作的,所以我对之前的代码为什么不起作用感到非常困惑-它抛出nil值未找到错误。
原来的VC:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == K.latinSegue {
if latinTextField.text != nil && latinTextField.text != "" {
guard let latinText = latinTextField.text else { fatalError("latinText broken")}
LatinViewController.latinText = latinText
}
}
}
destinationVC:
static var latinText: String!
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let latinTranslator = LatinTranslator()
let latinDefinition = latinTranslator.getHTMLAndDefinition(latinText: LatinViewController.latinText)
textLabel.text = latinDefinition
}
按下按钮时将调用segue。我检查了一下,只有一个。请帮忙!
您遇到的问题是,您正在创建的新实例,LatinViewController
而不使用您的应用程序实际将要导航到的实例。
代替这个:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == K.latinSegue {
if latinTextField.text != nil && latinTextField.text != "" {
guard let latinText = latinTextField.text else { fatalError("latinText broken")}
let destinationVC = LatinViewController()
destinationVC.latinText = latinText
}
}
}
您应该这样做:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == K.latinSegue, let destination = segue.destination as? LatinViewController else {
return
}
guard let text = latinTextField.text, !text.isEmpty else {
return
}
destination.latinText = text
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句