2017-09-23 39 views
1

內訪問「myProperty的」我有這樣的代碼:警告:嘗試自己的吸氣VS SwiftFormat

@IBInspectable var myProperty: String? { 
    set(newValue) { 
     //logic for setter 
    } 
    get { 
     return myProperty 
    } 
} 

上面的代碼生成一個警告:

嘗試訪問「myProperty的」內它自己的吸氣劑。訪問'自我' 明確地沉默這個警告。

所以我修改代碼的建議:

@IBInspectable var myProperty: String? { 
    set(newValue) { 
     //logic for setter 
    } 
    get { 
     return self.myProperty 
    } 
} 

的問題將得到解決,但我在應用程序構建階段使用SwiftFormat。 SwiftFormat會自動刪除self關鍵字,在此處將其視爲不必要。

我看到兩個解決方案:

  1. 關閉在SwiftFormat的redundantSelf規則。
  2. 修改(如何?)該代碼對於編譯器和SwiftFormat均可接受。

這會是什麼樣的最佳選擇?

+3

你的getter遞歸調用自己,所以這是錯誤的(導致堆棧溢出很快) - 有或沒有警告。比較https://stackoverflow.com/q/24025340/1187415。 –

回答

3

您的代碼首先不正確。添加self將無濟於事。

你創建的是無限遞歸。當myProperty的getter被調用時,你的return myProperty,它再次調用getter。在吸氣劑中,你再次返回myProperty,這會再次調用吸氣劑。這將一直持續下去,直到堆棧溢出。

如果你只是想要一個自定義setter,你可以試試willSetdidSet

var myProperty: String { 
    willSet(newValue) { 
     // do stuff 
    } 
} 

// or 

var myProperty: String { 
    didSet(oldValue) { 
     // do stuff 
    } 
} 
+0

如果需要自定義getter? –

+0

@BrittoThomas然後寫一個自定義的getter。 – Sweeper

+0

可以請寫的語法 –