我是新來的Swift和iOS,我想弄清楚什麼是設置和獲取值的推薦方法。我注意到,在類的構建中,與Android(我來自哪裏)相比,有很多直接訪問。那麼iOS退伍軍人會做什麼?爲什麼?有沒有推薦的方法?iOS Swift使用getter和setter還是直接訪問?
1
A
回答
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
斯威夫特執行二傳手的代碼,也就是什麼樣子了直接訪問實際上是一個方法調用。
2
看起來像一個賦值實際上是一個setter,看起來像讀一個成員實際上是一個getter。這個類通常有一個基本的setter,它只是分配或讀取值,但可以用你想要的任何代碼覆蓋。另外,還有did/setSet,其中類可以添加代碼以對變化作出反應。
你永遠不會寫代碼看起來就像你在調用setter或getter一樣,但實際上是在調用它們。
如果您在調用getter或setter時發現您正在執行大量代碼,這對調用者來說是意想不到的,那麼您可以使用函數。
相關問題
- 1. 屬性語法,我是直接訪問伊娃還是經過getter/setter?
- 2. 使用getter和setter
- 3. 使用getter和setter
- 4. 將Java移植到Javascript,Getter&Setter與直接訪問
- 5. getter和setter問題
- 6. Getter和setter問題
- 7. 訪問變量和使用getter和setter返回始終(null)
- 8. iOS Getter和Setter混淆
- 9. 我應該還是不應該使用getter和setter方法?
- 10. 何時使用getter和setter?
- 11. 使用lambda getter和setter
- 12. Swizzle swift屬性getter/setter
- 13. @property,setter和getter問題?
- 14. 什麼是Getter和Setter?
- 15. getter和setter C++
- 16. Synchronzied Getter和Setter
- 17. getter和setter在
- 18. 我應該直接訪問int還是從getter獲得double並進行投射?
- 19. actionscript奇怪的getter/setter訪問
- 20. 使用Object.defineProperty使用getter和setter
- 21. 使用通用的getter和setter用PHP
- 22. 使用getter或直接訪問私人成員會更好嗎?
- 23. Getter和Setter解釋?
- 24. Setter和getter消息
- 25. 汽車getter和setter
- 26. setter和getter錯誤
- 27. getter和setter風格
- 28. 枚舉setter和getter
- 29. Angular 2 Setter和Getter
- 30. Getter和Setter方法
好吧,所以我明白現在發生了什麼,但我猜想當我做變量時,我必須以類似的方式實現它以獲得相同的結果。這是建議嗎?如果他們有直接訪問權限或實際使用某種方法,會不會讓其他人感到困惑? – Warpzit
@Warpzit這在Objective-C中有點令人困惑,它支持直接訪問的變量和屬性。我認爲斯威夫特通過消除領域和財產之間的差異,從而消除了混淆,使得無法擁有一個無法保護的領域。當然,在某些情況下,爲了清晰起見,需要方法調用 - 例如,如果某個屬性是隻寫的,則最好用方法替換它。 – dasblinkenlight