2016-03-29 30 views
2

爲什麼Swift具有「懶惰變量」和「計算屬性」的概念,看起來簡單的方法或函數適合於此目的?爲什麼懶惰變量/計算屬性,而不僅僅是方法

在耗時的情況下,computing Pi,這不應該是一種方法嗎?和this case一樣。爲什麼迫使某些東西變成明顯更復雜的變量/財產?

+0

請參閱[這裏](http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on-each-other/43765143#43765143)。這是非常相關的... – Honey

回答

4

答案:存在惰性變量來減少加載時間(即出於優化原因)。除非明確要求,否則一些變量不需要立即使用。他們,如Math.pi可能需要一段時間來計算。因此,當最重要的用戶啓動操作完成時,應用程序可能會在後臺線程中開始計算它們。

至於計算的屬性,我認爲它更像是一個語言決定。 Objective-C很早以前就引入了屬性,並且它們一直在技術上被「計算」(對於getter和setter,它會自動合成/明確實現),並且它是(並且)的一個廣泛接受的特性。爲什麼?我不確定。也許這個問題沒有「明確的答案」。就像我說的,我相信這是一個語言決定,而不是完全合理化的東西。

對我個人來說,使用相同的.property語法讀取和寫入屬性,而不是property()setProperty(_: Property)函數,感覺更直觀。這是一種抽象,語言抽象的存在是爲了舒適性/易用性。您的示例非常有人氣,計算的屬性在Apple的框架中被數千人使用。不是每個計算出的屬性都需要非常耗時,而且其中大部分實際上都是瞬間的;因此他們被抽象爲如此。

當你考慮它時,一切都在技術上計算。例如,即使您將整數值直接設置爲結構字段,也需要在較低的範圍內發生。這些低級別的計算被抽象爲感覺像是非計算的具體實體,而實際上它們是。這一切歸結爲抽象。

相關問題