2019年8月30日 星期五

[iOS] PropertyWrapper屬性包裝器

PropertyWrapper,屬性包裝器,透過屬性包裝器,來針對屬性進行包裝。

舉例來說,我們希望某個變數它永遠都是大寫。


我們可以在使用的時候再將它轉換,可是感覺有些麻煩,因此我們可能會寫成這樣


但是這樣寫初始化的時候並不會進入didSet,因此只能很勤勞的在建構子也加入轉換大寫的程式碼。


終於大功告成了,但總的來說並不夠美觀,因為如果有更多的屬性,那不就要在每個屬性的didSet,與建構子中加入程式碼,此時,屬性包裝器就可以派上用場了。

我們建立一個Struct,命名成Uppercased,並在它的上方加入@propertyWrapper關鍵字。

接著Xcode會提示說,propertyWrapper需要有一個名為wrappedValue的屬性,我們將這個屬性加入,並且做一些處理。


程式碼做的事情就是將wrappedValue在set的時候轉換成大寫存在value變數之中,get的時候就取出轉換成大寫的value變數,基本上跟上方獨立處理是差不多的,但是這時候神奇的事情發生了,我們回到Data結構裡面,把title前方加入@Uppercased來修飾。



這樣這個title就被我們自定義的屬性包裝器包裝過了,此時要存取這個屬性都會透過包裝器來存取,就永遠都是大寫了。

有一個例子我覺得還不錯,存取UserDefault就可以使用屬性包裝器。


存取的時候透過屬性包裝器直接存入到UserDefault之中,就可以不需要寫一堆重複的程式碼了。

沒有留言:

張貼留言