在两个View Controller Swift IOS之间传递数据

时间:2015-07-11 03:50:10

标签: ios objective-c swift

我一直在制作简单的GPA计算应用。它从许多文本字段中获取用户输入并进行计算并显示结果。我想在2ndViewController

中显示结果
@IBAction func CalculateGpa(sender: AnyObject){
//all the calculation happen here
//example
        let gpa:Float = TotalGiCi/TotalGi

}

我希望将gpa传递给我的2ndViewController标签。 所以我做了这样的编码

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var ResultViewController : ViewControllerResult = segue.destinationViewController as! ViewControllerResult

        ResultViewController.GPAResultLabel = "\(gpa)"
    }

然后我收到错误Use of unresolved identifier gpa

我能在这做什么?

我尝试删除@IBAction func CalculateGpa(sender: AnyObject){并将其替换为override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {,因为sender是anyObject。然后我得到了错误

unrecognized selector sent to instance

2 个答案:

答案 0 :(得分:1)

使用var全局定义变量,因为使用let声明的变量必须立即赋值。您不能简单地使用let和no值来定义变量,就像您在第一行上尝试的那样。

如果要在运行时修改值,这不是常量。因此,您需要一个变量,即使它的值只改变一次。

class viewcontroller:UIViewcontroller{

// Define  variable gpa here with its return type...
   var gpa:Float?   

override func viewDidLoad() {
    super.viewDidLoad()
    //   relevant code
}

@IBAction func CalculateGpa(sender: AnyObject){
    gpa = TotalGiCi/TotalGi
}

// Data passing code

答案 1 :(得分:1)

全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。全局常量和变量总是懒惰地计算

参考下面的代码。我们已经在下面声明了这个变量。

 class YourViewControllerName: UIViewController 
 {
   let gpa:Float = TotalGiCi/TotalGi
              //OR
   var gpa:Float = TotalGiCi/TotalGi
   @IBAction func CalculateGpa(sender: AnyObject)
   {
   //all the calculation happen here
   //example
   //Do your Calculation here
   }

   override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
   {          
      var ResultViewController : ViewControllerResult = segue.destinationViewController as! ViewControllerResult
      ResultViewController.GPAResultLabel = "\(gpa)"
   }
}