PropertyWrapper,屬性包裝器,透過屬性包裝器,來針對屬性進行包裝。
舉例來說,我們希望某個變數它永遠都是大寫。
我們可以在使用的時候再將它轉換,可是感覺有些麻煩,因此我們可能會寫成這樣
但是這樣寫初始化的時候並不會進入didSet,因此只能很勤勞的在建構子也加入轉換大寫的程式碼。
終於大功告成了,但總的來說並不夠美觀,因為如果有更多的屬性,那不就要在每個屬性的didSet,與建構子中加入程式碼,此時,屬性包裝器就可以派上用場了。
我們建立一個Struct,命名成Uppercased,並在它的上方加入@propertyWrapper關鍵字。
接著Xcode會提示說,propertyWrapper需要有一個名為wrappedValue的屬性,我們將這個屬性加入,並且做一些處理。
程式碼做的事情就是將wrappedValue在set的時候轉換成大寫存在value變數之中,get的時候就取出轉換成大寫的value變數,基本上跟上方獨立處理是差不多的,但是這時候神奇的事情發生了,我們回到Data結構裡面,把title前方加入@Uppercased來修飾。
這樣這個title就被我們自定義的屬性包裝器包裝過了,此時要存取這個屬性都會透過包裝器來存取,就永遠都是大寫了。
有一個例子我覺得還不錯,存取UserDefault就可以使用屬性包裝器。
存取的時候透過屬性包裝器直接存入到UserDefault之中,就可以不需要寫一堆重複的程式碼了。
沒有留言:
張貼留言