我有这样的代码:

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

上面的代码生成警告:



所以我按照建议修复了代码:
@IBInspectable var myProperty: String? {
    set(newValue) {
        //logic for setter
    }
    get {
        return self.myProperty
    }
}

该问题将得到解决,但是在应用程序构建阶段我正在使用SwiftFormat
SwiftFormat会自动删除自我关键字,在此将其视为不必要。

我看到两个解决方案:
  • 在SwiftFormat中关闭冗余Self 规则。
  • 修改(如何?)使编译器和SwiftFormat都可接受的代码。

  • 最好的选择是什么?

    最佳答案

    首先,您的代码不正确。添加self将无济于事。

    您创建的是无限递归。调用myProperty的getter时,您将使用return myProperty再次调用该getter。在getter中,您再次返回myProperty,这再次调用了getter。这将一直持续下去,直到堆栈溢出为止。

    如果只需要自定义 setter ,则可以尝试willSetdidSet

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

    关于swift - 警告: Attempting to access 'myProperty' within its own getter vs SwiftFormat,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46380240/

    10-11 17:28