2016-08-16 1 views
1

Ich bin verwirrt darüber, wie eine globale Variable außerhalb einer Funktion in meinem schnellen Projekt zu deklarieren. Dies ist der Code, den ich mit dem Text einer ausgewählten Reihe von UITableView als die Variable „chosenFeed“ speichern: 1Eine globale Variable in swift während der Verwendung von UITableView deklarieren

Dann versuche ich, diese Variable zu verwenden, um eine URL auf einem anderen View-Controller zu öffnen wie: 2

Ich habe gelernt, dass ich das falsch gemacht habe, weil "selectedFeed" lokal zu dieser Override-Funktion ist. Also habe ich keine Ahnung, wie diese globale Variable deklariert werden soll, auf die von einem anderen VC zugegriffen werden soll. Einige Leute empfohlen structs, also versuchte ich dies in der Tableview VC:

struct GlobalVariable { 
    static var indexPath = tableView.indexPathForSelectedRow 
    static var currentCell = tableView.cellForRowAtIndexPath(indexPath!)! as UITableViewCell 
    static var choosenFeed = tableDict[currentCell.textLabel!.text!] 
} 

aber das hat nicht funktioniert entweder bc zu viele mehrdeutige Verweise. Irgendwelche Lösungen?

+0

Verwenden Sie kein globales. Deklarieren Sie eine Eigenschaft auf Ihrem zweiten Ansichtscontroller, und legen Sie dann diese Eigenschaft fest, bevor Sie sie präsentieren. Verwenden Sie Storyboards? Wenn ja, dann können Sie dies in 'prepareForSegueWithIdentifier tun:' – Paulw11

+0

ja, genau wie @ Paulw11 erwähnt, verwenden Sie keine globale Variable. Wenn Ihr Projekt zu groß wird, werden Sie mit zu vielen Variablennamen verwechselt, und es ist nicht gut für die Entwicklung. Wird Ihre Variable nur zwischen diesen 2 verschiedenen View-Controllern verwendet? – jo3birdtalk

Antwort

1

Wie die anderen Plakate erwähnen mit globalen Variablen ist nicht die beste Idee. Es ist keine gute Programmierpraxis und kann sehr verwirrend werden, sobald Ihre App skaliert. Wenn Sie Informationen zwischen einem TableView und einem anderen View (einem ViewController, einer Zelle usw.) übergeben, haben Sie zwei Möglichkeiten (ohne globale Variablen zu verwenden).

Erste Option: Verwenden Sie prepareForSegue

Auf Ihrem Ziel Viewcontroller benötigen Sie eine Variable erstellen genannt chosenFeed. Dann an der Unterseite des Tableview können Sie diese prepareForSegue Funktion verwenden, um die Daten zu übergeben:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let destinationVC = segue.destinationViewController as ViewController { 
     destinationVC.chosenFeed = self.chosenFeed 
    } 
} 

oder Sie könnten DidSelectRowAtIndexPath verwenden

Wenn diese Daten gesendet werden muss und basieren auf welcher Zelle Sie ausgewählt kann didSelectRowAtIndexPath verwenden. Sie müssen Ihrem Ziel-ViewController noch eine Variable namens selectedFeed hinzufügen. Wenn Sie diese Option wählen, müssen Sie im Storyboard auch einen Namen angeben.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    // Youll need the name of your ViewController here to pass the variable 
    let destinationVC = "nameOfTheDestination_VC()" 
    destinationVC.chosenFeed = self.chosenFeed 

    //This is where you use the named segue from the Storyboard 
    destinationVC.performSegueWithIdentifier("segueName", sender: self) 

}

eine dieser beiden Vorschläge sollten das sein, was Sie suchen. Wenn nach all dem, entscheiden Sie noch Sie eine globale Variable müssen (nach all dem die Frage gestellt wurde) Sie müssen nur die Variable über der Klassendeklaration erklären:

var chosenFeed : String? 
class About_VC: UIViewController { 
    //code here 
} 

Eine letzte Anmerkung, aus dem Beispiel Bilder, die Sie gepostet werden vorsichtig mit Kraftauspacken. Prost!

Verwandte Themen