iOS标签不会使用字符串值更新文本,但打印字符串在Swift中正常工作

时间:2017-04-21 05:53:56

标签: ios swift

我一直在寻找解决此问题的最后两天。我遇到问题的代码部分是:[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未更改并保持其默认值。

请帮忙。 感谢

2 个答案:

答案 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),你就可以了。