2016-10-04 4 views
0

Hier folgt Code:separate Klasse speichern Eingang

class settings { 

    static let SharedInstance = settings() 
    var city: String { 
     return self.city 
    } 
} 

jetzt, ich bin in der Lage, diese Klasse für den Zugriff auf von einer separaten Ansicht wie folgt aus:

@IBOutlet weak var cityLabel: UILabel! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    cityLabel.text = settings.SharedInstance.city 
} 

, aber ich möchte in der Lage sein, um den Wert der Stadt innerhalb meiner "settings" -Klasse von einer anderen Ansicht zu ändern.

Etwas wie:

@IBOutlet weak var city: UITextField! 
@IBAction func saveButtonClicked(_ sender: AnyObject) { 
    settings.SharedInstance.cityVar(city.text) 
    closeKeyboard() 
} 

Ich weiß nicht, wie von hier

Meine Logik zu bekommen, ist ein setter in meinem class, oder vielleicht ein function, die eine string nimmt und die Variable ändert einzuleiten, genau wie ich oben versucht habe.

UPDATE

kann ich nun eingestellt und den Namen der Stadt in dieser Klasse erhalten:

class settings { 

    static let SharedInstance = settings() 

    var city: String? 
    func setCity(city: String){ 

     self.city = city 
    } 

} 

Das Problem ist jetzt, dass, wenn ich Zugriff auf die Stadt Variable in meiner Klasse „Einstellungen“ in einem anderen Ansicht, es zeigt nicht den neuen Wert:

override func viewDidLoad() { 
     super.viewDidLoad() 
     cityLabel.text = settings.SharedInstance.city 

    } 

ich glaube, es die Sicht nicht aktualisieren

+0

Klasse Einstellungen { privat var _x: Int = 0 var x: Int { Menge {_x = 2 * newValue} get {return _x/2}} } versuchen auf diese Weise –

Antwort

0

Wenn Sie die folgende Zeile:

var city: String { 
    return self.city 
} 

dann city eine sein wird „erhalten nur“ Eigenschaft. Ich sehe keinen Grund, warum Sie die Variable so initialisieren müssten. Bitte klären Sie, wenn Sie das tun.

Was ich vorschlagen würde, ist Ihre Variable zu ändern, so dass es optional ist. Dann könnten Sie Ihre Klasse in etwa so ändern:

class settings { 

    static let SharedInstance = settings() 

    var city: String? 

} 

Dann müssen Sie keine Initialisierer für die Klasse erstellen. Wenn Sie möchten, auch als auch eine Setter-Methode in der Klasse erstellen, dann können Sie zB:

func setCity(city: String){ 
    self.city = city 
} 

Was dies bedeutet, ist jetzt das folgende Verfahren funktionieren würde:

class myClass: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     cityLabel.text = settings.SharedInstance.city 
     settings.SharedInstance.city = cityLabel.text 
    } 

} 
+0

hmm, auch Sie recht, macht es keinen Sinn machen um es als "bekommen nur"zu haben- Ich habe versucht, Ihren Code, und es funktioniert, wenn ich var city = "etwas" erklären, es scheint nicht zu verstehen, wenn ich meine Stadt aus meiner Sicht so eingestellt: @IbAction func saveButtonClicked (_ sender: AnyObject) { settings.SharedInstance.setCity (Stadt: city.text!) –

+0

Welchen Fehler gibt es für diesen Code? Ich sehe nicht, was mit dieser Implementierung nicht stimmt. –

+0

kein Fehler was auch immer :-) Es tut einfach nichts, wenn ich in mein Eingabefeld tippe und meine Taste drücke. –

Verwandte Themen