我一直在寻找解决此问题的最后两天。我遇到问题的代码部分是:[say practiceLabelVar gets the value optional(Goldfish)]
class PracticeTyping: UIViewController {
@IBOutlet weak var practiceLabel: UILabel!
var practiceLabelVar: String?
var x = "test"
override func viewDidLoad() {
super.viewDidLoad()
if let newPracticeLabelVar = practiceLabelVar {
self.practiceLabel.text = newPracticeLabelVar
print ("\(newPracticeLabelVar)")
x = newPracticeLabelVar
} else {
print ("\(x)")
}
}
}
我得到的输出在控制台中如下:
test
Goldfish
注意:代码在else语句中打印值,然后在if let语句中输出代码。
practiceLabel.text
未更改并保持其默认值。
请帮忙。 感谢
答案 0 :(得分:0)
我想请您理解Optional Chaining as an Alternative to Forced Unwrapping
是什么代码运行正常它只检查是否有值,是的,没有值,所以当然会执行else条件。尝试分配一些值,你就会明白它是如何工作的
注意:var practiceLabelVar: String?
中没有值,如果有值,如果let将起作用,否则将执行
答案 1 :(得分:0)
终于想通了。根据您在上面添加的评论,您从另一个视图设置“金鱼”,如上所述,下面是相同@IBAction func practiceTyping(_ sender: Any) {
performSegue(withIdentifier: "practiceTypingSegue", sender: self)
let PracticeTypingVar: PracticeTyping = self.storyboard?.instantiateViewController(withIdentifier: "PracticeTypingView") as! PracticeTyping
PracticeTypingVar.practiceLabelVar = myFavoriteAnimals[(sender as AnyObject).tag].name
self.present(PracticeTypingVar, animated: true, completion: nil)
}
的代码
你在这里做的是你正在呈现“PracticeTyping”viewController 2次,一次是performSegue(),另一次是self.present(viewController),这是错误的。首先打印“test”的原因是当你通过performSegue呈现视图时,你没有设置“practiceLabelVar”的值。
所以删除performSegue(withIdentifier: "practiceTypingSegue", sender: self)
,你就可以了。