2016-09-21 60 views
2

比方說,我想要製作某種單選按鈕,用於跟蹤其活動狀態並在其狀態更改時更改顏色。我希望它在設置值時改變顏色。這是我將如何實現它:這是正式使用get和set在Swift中的正確方法嗎?

class TagButton: UIButton { 

    var _active: Bool = false 

    var active: Bool { 
     set(newVal){ 
      _active = newVal 
      if(!newVal){ 
       self.backgroundColor = UIColor.white //inactive 
      } 
      else { 
       self.backgroundColor = UIColor.red //active 
      } 
     } 
     get { 
      return _active 
     } 
    } 
} 

現在,我已經看到了一些問題,提出了類似的方法,但讓我困擾,在於是否這實際上是用途雨燕。我有一種感覺,我在這裏發明了一輛自行車。在官方的Swift文檔中,我找不到任何關於此的信息。有人能夠證實這一點嗎?

回答

2

你的代碼看起來像Objective-C。在斯威夫特,沒有必要創建後備存儲,您可以使用屬性觀察者didSet改變背景顏色:

class TagButton: UIButton { 
    var active = false { 
     didSet { 
      backgroundColor = active ? .red : .white 
     } 
    } 
} 

或者你可以使用一個計算屬性,並在不具備儲存active所有:

class TagButton: UIButton { 
    var active: Bool { 
     set { 
      backgroundColor = newValue ? .red : .white 
     } 
     get { 
      return backgroundColor == .red 
     } 
    } 
} 

你可以閱讀更多關於物業觀察員計算屬性here.

+0

如果我想要自定義設置方法,該怎麼辦? –

+0

@IlyaLapan:做什麼的自定義方法? –

+0

@appzYourLife不是在這個特殊的情況下,但總的來說,如果我不僅需要自定義getter而且還需要自定義setter? –

相關問題