2017-11-02 1 views
1

여러 뷰와 seagues에 부울 값을 저장하려고합니다. 싱글 톤을 사용하는 것이 답이라고 생각합니다. 싱글 톤 클래스를 설정했지만 여전히 그 값을 가지고 있지 않습니다. 이것은 내가 설정 한 나의 싱글 톤 클래스입니다.신속하게 Singleton을 구현하는 방법

class Singleton { 
    static let instance = Singleton() 
    var data: Bool = false; 

    private init() { } 

    func SetData(value: Bool){ 
     data = value 
    } 

    func GetData() -> Bool{ 
     return data 
    } 
} 

여기가 바로이 부분입니다. 기본적으로 var isOn을 false로 설정합니다. true이면 사용자 데이터를 Imperial 시스템에 설정하고 false이면 Metric으로 설정합니다.

//This is the function for the button that lets the user switch between the metric system and imperial system 
@IBAction func switchMeasurements(_ sender: Any) { 
    var temperatureS: Float = Float(0) 
    var temperatureB: Float = Float(0) 
    var lakeDep: Float = Float(0) 

    isOn = Singleton.instance.GetData() 

    //Clicks the button, if isOn is true then we set the data to the imperial system. 
    isOn = !isOn 

    Singleton.instance.SetData(value: isOn) 

    if isOn { 
     ....} 

문제는 그들이 다음, 임페리얼로 변경 버튼을 클릭 멀리에 해당 뷰와 복귀에서 이동을 클릭하면,이 데이터와 거짓과 놨에 ISON을 재설정한다는 것입니다. 나는 isOn을 구하려고 노력하고 있습니다. 컴백시 이전에 그것을 선택했다면 여전히 제국에있을 것입니다. 모든 팁/도움을 크게 주시면 감사하겠습니다.

+0

관련이 없지만 메서드 및 변수 이름은 소문자로 시작해야합니다. 클래스 및 구조체 이름은 대문자로 시작합니다. – rmaddy

+0

[Swift 3의 속성이있는 싱글 톤] (https://stackoverflow.com/questions/37953317/singleton-with-properties-in-swift-3)의 가능한 복제본 – jpetrichsr

답변

0

당신은 스위프트와 같은 방식으로

class Singleton { 
    static var shared = Singleton() 

    var data: Bool = fasle { 
    get { return data } 
    set { data = newValue } 
    } 
} 

나는 그것이 "복귀"를 의미한다 무엇을 이해하지 못하는 그다음에없는 그 일을. 이 뷰를 닫거나 이전 뷰를 pop 한 경우 문제는 하위 뷰를 설정할 때상태를 viewDidLoad에 설정하지 않는다는 것입니다. 일부 ViewerController와 "comeback"을 스위처로 보내면 공유 플래그 상태를 변경하거나 viewDidAppear/viewWillAppear 또는 다른 곳의 isOn을 변경하십시오. 이 변종을 확인하십시오

희망이 있습니다!

관련 문제