2016-06-20 40 views
1

我是新來的Swift和iOS,我想弄清楚什麼是設置和獲取值的推薦方法。我注意到,在類的構建中,與Android(我來自哪裏)相比,有很多直接訪問。那麼iOS退伍軍人會做什麼?爲什麼?有沒有推薦的方法?iOS Swift使用getter和setter還是直接訪問?

回答

2

儘管是語法上等同,訪問斯威夫特性質是不一樣的訪問Java變量,當你暴露在Java中的變量,像這樣

class MyClass { 
    public int val = 123; 
} 

你有沒有在以後保護它的方式時間沒有打破讀寫c.val變量的其他人的代碼。

斯威夫特性能,而另一方面,讓你添加自定義的getter和setter的東西,看起來像開頭的變量:

class MyClass { 
    public var val = 123 
} 

如果你決定要一個setter後,您可以更改這

class MyClass { 
    private var _val = 123 
    public var val : Int { 
     get { 
      return _val 
     } 
     set (newVal) { 
      precondition(newVal >= 0, "Negative values are not allowed") 
      _val = newVal 
     } 
    } 
} 

這是因爲當你寫c.val = -321斯威夫特執行二傳手的代碼,也就是什麼樣子了直接訪問實際上是一個方法調用。

+0

好吧,所以我明白現在發生了什麼,但我猜想當我做變量時,我必須以類似的方式實現它以獲得相同的結果。這是建議嗎?如果他們有直接訪問權限或實際使用某種方法,會不會讓其他人感到困惑? – Warpzit

+1

@Warpzit這在Objective-C中有點令人困惑,它支持直接訪問的變量和屬性。我認爲斯威夫特通過消除領域和財產之間的差異,從而消除了混淆,使得無法擁有一個無法保護的領域。當然,在某些情況下,爲了清晰起見,需要方法調用 - 例如,如果某個屬性是隻寫的,則最好用方法替換它。 – dasblinkenlight

2

看起來像一個賦值實際上是一個setter,看起來像讀一個成員實際上是一個getter。這個類通常有一個基本的setter,它只是分配或讀取值,但可以用你想要的任何代碼覆蓋。另外,還有did/setSet,其中類可以添加代碼以對變化作出反應。

你永遠不會寫代碼看起來就像你在調用setter或getter一樣,但實際上是在調用它們。

如果您在調用getter或setter時發現您正在執行大量代碼,這對調用者來說是意想不到的,那麼您可以使用函數。