2016-04-29 51 views
2

我知道这是基本的东西,但我似乎无法得到这个。我有一个函数,它采用日期选择器值,将其转换为字符串,将其分配给一个变量,然后他们更新标签文本。访问一个超出范围的变量Swift

我希望能够访问该函数以外的功能,所以我可以在prepareForSegue中使用它。到目前为止,我已经尝试了一个全局变量并在函数被调用时更新它,但似乎并不奏效,并且我试图在函数中返回值,但是我必须做到这一点,因为它也没有工作。

的功能:

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出来的功能。任何帮助深表感谢!

var aString = "" 

func doStuffWithA(inout theString: String) { 

theString = "Groovy" 
} 

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

或者你可以声明外的财产:

回答

1

您可以用不同的方式。你可以使用一个INOUT参数的方法,使方法来更新参数,这样做方法:

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

非常感谢!我试图自己使用选项2,但一定是错过了一些东西。您的版本有效。 – m1234

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 
} 

}