访问超出范围的变量Swift

时间:2016-04-29 01:14:26

标签: ios swift function variables return

我知道这是基本的东西,但我似乎无法得到这个。我有一个函数,它接受日期选择器值,将其转换为字符串,将其分配给变量,然后更新标签文本。

我希望能够在函数外部访问该变量,以便我可以在prepareForSegue中使用它。到目前为止,我已经尝试创建一个全局变量并在调用函数时更新它,但似乎没有用,我尝试在函数中返回值,但我必须做错了,因为它没有&#39工作要么。

功能:

func datePickerChanged(datePicker:UIDatePicker) {
    var dateFormatter = NSDateFormatter()

    dateFormatter.dateStyle = NSDateFormatterStyle.FullStyle
    dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

    var strDate = dateFormatter.stringFromDate(datePicker.date)
    dateTimeLabel.text = strDate
}

我想让strDate退出该功能。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

您可以通过不同的方式执行此操作。您可以在方法上使用inout参数以允许方法更新参数,如下所示:

var aString = ""

func doStuffWithA(inout theString: String) {

theString = "Groovy"
}

doStuffWithA(&aString) // changes aString to "Groovy"

或者您可以在方法之外声明属性:

class SomeClass {
    var someString: String = ""

    func doStuff() {
        self.someString = "Groovy"
    }
 }

如果您只想要一个segue,可以在performSegueWithIdentifier上传递对象,如下所示:

func doStuff() {

    var aString = "Groovy"
    performSegueWithIdentifier("someSegue", sender: aString)

}

// Then here you can use it and assign it as a property on the next view controller

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "someSegue" {

         guard let aString = sender as? String else {

         return
         }

         let nextVC = segue.destinationViewController as! SomeVC
         nextVC.someProperty = aString
    }
}

答案 1 :(得分:0)

如果您希望通过课程可以访问它,那么就可以执行此操作

class xyz {

   var startDate:String?

   func datePickerChanged(datePicker:UIDatePicker) {
      var dateFormatter = NSDateFormatter()
      dateFormatter.dateStyle = NSDateFormatterStyle.FullStyle
      dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

      self.startDate = dateFormatter.stringFromDate(datePicker.date)
      dateTimeLabel.text = self.startDate
 }

}