2015-03-31 2 views
0

Я пытаюсь построить ответ, который мне дал here. То, что я пытаюсь, очень просто - я хочу текстовое поле, в которое вы можете ввести текст. Вы нажимаете кнопку перехода, и она выводит вас на новое представление и заменяет текст на ярлыке на этой странице тем, что вводится пользователем в поле. Это код, который я использую на первой странице.Почему я получаю эти ошибки при попытке передать переменную в режиме segue в swift?

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'

Спасибо.

ответ

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 во вторую переменную dictionary контроллера.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "viewTwo" 
     { 
      if let destinationVC = segue.destinationViewController as? viewTwo{ 
       destinationVC.dictionary = self.entry.text 
      } 
     } 
    } 
0

Словарь не является постоянной, поэтому объявим его как lazy var, не let:

lazy var dictionary: String { 
    return entry.text 
}() 
Смежные вопросы