简体   繁体   English

无法将String类型的值分配为UILabel类型

[英]Cannot assign value of type String to type UILabel

I have marked the part of my code where the problem is, it is commented out. 我已经在我的代码部分标记了问题所在,已将其注释掉。 The error message is: 错误消息是:

Cannot assign value of type String! 无法分配字符串类型的值! to type UILabel!. 键入UILabel!。

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SendDataSegue" {
        if let sendToDetailViewController = segue.destinationViewController as? DetailViewController {
            var sendingText = metadataObj.stringValue
            sendToDetailViewController.messageLabelDos = sendingText
        }
    }
}

The label it should be changing is in my DetailViewController and it is a label. 它应该更改的标签在我的DetailViewController中,它是一个标签。 The code above is from my original ViewController. 上面的代码来自我的原始ViewController。 How can I make this work? 我该如何进行这项工作?

More code to put in context: 要放在上下文中的更多代码:

if metadataObj.stringValue != nil {

dispatch_async(dispatch_get_main_queue()) {
    self.performSegueWithIdentifier("SendDataSegue", sender: self)
}

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SendDataSegue" {
        if let sendToDetailViewController = segue.destinationViewController as? DetailViewController {
            var sendingText = metadataObj.stringValue
            sendToDetailViewController.viaSegue = sendingText
        }
    }
}

You need to pass the String instead of setting text to label, because when you correct it and set like this sendToDetailViewController.messageLabelDos.text = sendingText , you will get nil error because messageLabelDos is not initialize yet, so try like this. 您需要传递String而不是将文本设置为label,因为校正它并像sendToDetailViewController.messageLabelDos.text = sendingText这样进行设置时,由于messageLabelDos尚未初始化,因此您将得到nil错误,因此请尝试这样。 Create one string instance in DetailViewController and use that inside prepareForSegue for passing String and then use that String instance in viewDidLoad to assign Label to text. DetailViewController创建一个字符串实例,并在prepareForSegue中使用该实例传递字符串,然后在viewDidLoad使用该String实例将Label分配给文本。

class ViewController: UIViewController { 

    //Your other methods

    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
        if segue.identifier == "SendDataSegue" {
            if let sendToDetailViewController = segue.destinationViewController as? DetailViewController {
                var sendingText = metadataObj.stringValue
                sendToDetailViewController.messageDos = sendingText
            }
        }
    }
}

Inside DetailViewController 内部DetailViewController

var messageDos: String = ""

override func viewDidLoad() {
    super.viewDidLoad()
    self.messageLabelDos.text = messageDos
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM