2017-09-23 38 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

可以请写的语法 –