2016-04-29 15 views
2

Ich weiß, dass das elementare Zeug ist, aber ich kann nicht scheinen, das zu bekommen. Ich habe eine Funktion, die den Wert der Datumsauswahl übernimmt, ihn in eine Zeichenfolge konvertiert, sie einer Variablen zuweist und einen Etikettentext aktualisiert.Zugriff auf eine Variable, die nicht im Gültigkeitsbereich ist Swift

Ich möchte in der Lage sein, auf diese Variable außerhalb der Funktion zuzugreifen, damit ich sie in PrepareForSegue verwenden kann. Bisher habe ich versucht, eine globale Variable zu erstellen und sie zu aktualisieren, wenn die Funktion aufgerufen wird, aber das schien nicht zu funktionieren, und ich habe versucht, den Wert in der Funktion zurückzugeben, aber ich muss das falsch gemacht haben, weil es auch nicht funktioniert hat .

Die Funktion:

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

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

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

möchte ich strDate aus der Funktion erhalten. Jede Hilfe wird sehr geschätzt!

Antwort

1

Sie können dies auf verschiedene Weise .. Sie können einen inout Parameter auf ein Verfahren verwenden, das Verfahren zu ermöglichen, die Parameter zu aktualisieren, wie folgt aus:

var aString = "" 

func doStuffWithA(inout theString: String) { 

theString = "Groovy" 
} 

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

Oder Sie können das Eigentum außerhalb des declare Methode:

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 
    } 
} 
:

class SomeClass { 
    var someString: String = "" 

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

Wenn Sie dies für eine segue nur wollen, können Sie das Objekt auf performSegueWithIdentifier, wie dies passieren kann

+1

Dank tun können! Ich habe versucht, Option 2 selbst zu benutzen, aber ich muss etwas verpasst haben. Deine Version funktioniert. – m1234

0

Wenn Sie es wünschen, aus der Klasse eine außer Funktion zugänglich sein, dies ist, wie Sie so viel

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 
} 

} 
Verwandte Themen