如何解决为什么我的变量的值在Swift中恢复?
我的代码可以正常工作,但我不知道为什么能工作。
具有此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
}
}
}
目的地VC:
var latinText: String?
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
let latinTranslator = LatinTranslator()
let latinDefinition = latinTranslator.getHTMLAndDefinition(latinText: **latinText!**)
textLabel.text = latinDefinition
}
latinText!即使我在为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
}
}
}
目的地VC:
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
}
,
它返回nil,因为您创建的destinationVC是新的LatinViewController而不是当前segue的viewController
let destinationVC = LatinViewController()
更改为此:
let destinationVC = segue.destination as? LatinViewController
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。