为什么我尝试在swift中传递segue上的变量时会收到这些错误?

时间:2015-03-31 20:53:01

标签: xcode swift views segue

我正在努力建立我给予的答案here。我想要的是非常简单 - 我想要一个可以输入文本的文本字段。按下go按钮,它将带您进入新视图,并用该框中输入的用户替换该页面上标签上的文本。这是我在第一页上使用的代码。

import UIKit

class ViewController: UIViewController {

    @IBOutlet var entry: UITextField!

    let dictionary = entry.text // Line 7 ERROR


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "viewTwo"
        {
            if let destinationVC = segue.destinationViewController as? viewTwo{
                destinationVC.dictionary = self.dictionary // Line 24 ERROR
            }
        }
    }

    @IBAction func goToViewTwo(sender: AnyObject) {
        performSegueWithIdentifier("viewTwo", sender: self)
    }

}

我只包含第一个视图中的代码,因为我知道第二个视图中的代码正在运行。

在我尝试使用文本字段之前,我没有遇到过错误 - 之前我只有一个预先选择的文本来转移它。以前,我没有let dictionary = entry.text而是let dictionary = "foo",而是有效。

所以我的问题完全相同,但是有一个文本字段而不是预先选择的文本 - 我真正想知道的是为什么我的代码之前没有工作。

我得到的错误是在第7行(我已经标记了上面有错误的行) - 'ViewController.Type' does not have member names 'entry'并且第24行也有错误但是我怀疑这与此错误有关并且将是如果此错误也已修复,则修复。尽管如此,第24行的错误是:'ViewController.Type' does not have member names 'dictionary'

谢谢。

2 个答案:

答案 0 :(得分:1)

您应该在声明中将字典设置为var dictionary = ""。您在此处使用var代替let,以便稍后更改dictionary的值。

然后在@IBAction func goToViewTwo(sender: AnyObject){}方法中设置self.dictionary = entry.text

 @IBAction func goToViewTwo(sender: AnyObject) {
        dictionary = entry.text
        performSegueWithIdentifier("viewTwo", sender: self)
    }

或者,您可以在prepareForSegue()方法中执行以下操作。 这样,您就不需要声明dictionary来保存UITextField的文本值,您只需将文本值从entry传递到第二个视图控制器{{1}变量。

dictionary

答案 1 :(得分:0)

字典不是常量,因此将其声明为lazy var,而不是let

lazy var dictionary: String {
     return entry.text
}()