2017-10-26 11 views
0
私は私が私の見解コントローラのいずれかでそれにアクセスするクラス Styleを、持っている

はアクセス:グローバルクラス

class SecondVC: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Style.textSize = 30 

     let label = UILabel() 

     label.frame = CGRect(x: 100, y: 100, width: 100, height: 100) 
     label.text = "Some text" 
     label.font = UIFont.systemFont(ofSize: Style.textSize, weight: .light) 

     view.addSubview(label) 
    } 
} 
:私は、このビューコントローラを開くと

class Style { 
    static var textSize: CGFloat = 17 

    deinit { 
     print("i have been deinitiated") 
    } 
} 

、それは30にTEXTSIZEを設定し、

初期ビューコントローラに戻り、SecondVCの割り当てを解除すると、StyleのtextSizeはまだ30です。

クラスStyleはどうなりますか?楽器を走らせるとき、私はクラスStyleについて何も見ません。私はクラスStyleが決して初期化されないことを理解しますが、それはtextSizeの情報をどこに保存しますか?

+1

なぜ「textSize」の値は30から17に戻るべきだと思いますか? – rmaddy

+0

'var'と言ったときに、その変数に30を変数に代入した後に、それが変更される可能性があることを伝えています17しかし30 – Lamar

+0

' textSize'が '17 'それはどこかに救われるということは私にとって自然なことだと思うだけです。それは、アプリケーションが閉じられて再び開くまで、常に「30」になるということですか?申し訳ありませんが、私はまだそれを理解していません。これについて読むことができるドキュメントはありますか?これを検索すると、結果は得られません。 –

答えて

1

を読みたい場合があります:

class Singleton { 
    static let sharedInstance = Singleton() 
    var textSize = CGFloat() 
} 

値を割り当てます。

Singleton.sharedInstance.textSize = 30 

取得値:

let textSize = Singleton.sharedInstance.textSize.count 

このようにすることで、Singletonを呼び出すインスタンスが1つだけ存在することを確認し、そのインスタンスの値を取得できます。

これはApplesの推奨シングルトンスタイルによるものです。それについてもっと読むhere

-1

検索スウィフト静的、またはスウィフトプログラミング言語(プロパティ)を読む、あなたは答えを得るでしょう。

+0

なぜですか?私は英語が貧しいので、正しい方法を教えてくれました。私はこれで答えを得ています。 – helong

1

クラスStylestatic varを値17で定義しましたが、今度はdataに格納されています。 Style.textSize = 30を実行した場合、textSize30となり、SecondVCdeinit-edとなった場合には、関係がないため、textSizeには影響しません。 textSizeはまだ30です。

uはStyle.textSize = 30StyleSecondVCの財産Style()ないではありませんが、コールのためだけのクラス参照の使用静的VAR textSize

あなたはStyle().textSize = 30var textSize: CGFloat = 17Style.textSize = 30static var textSize: CGFloat = 17を変更する場合に表示されると言います差。

また、あなたがGlobalクラスを作成したい場合は、instanceに代わりSingletonを使用this

1

静的変数は、アプリケーションが実行されている間は決して解放されません。静的な生活は永遠に続く。以下のコードでは、一度set deinitを呼び出します。style = nil

class Style { 
    var textSize: CGFloat = 17 

    deinit { 
    print("i have been deinitiated") 
    } 
} 

class Singleton { 

    static weak var weakReference : Style? 
    static var shared: Style { 
    get { 
     guard let style = weakReference else { 
      let style = Style() 
      weakReference = style 
      return style 
     } 
     return style 
     } 
    } 
} 

class SecondVC: UIViewController { 

    var str: Style? = Singleton.shared 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     str?.textSize = 30 
     str = nil 
    } 
} 
関連する問題