首页 > 解决方案 > 被包装对象的访问名称,在 Swift 属性包装器实现中

问题描述

我正在使用 Swift 属性包装器来定义如下内容:

@MyWrapper var foo: Int

在属性包装器的实现中,我想以字符串的形式访问变量 foo 的名称。像这样的东西:

@propertyWrapper
public struct MyWrapper<Type> {
  init() {
    // Get access to "foo" -- name of var as String
  }
}

建议?

标签: swiftproperty-wrapper

解决方案


将变量名传递给包装器;您可以使用这种替代方式。

@propertyWrapper
public struct MyWrapper<Type> {

  var wrappedValue: ... {
  set{.....}
  get{.....}
  }

  init(wrappedValue initialValue: Double, _ nameOfTheVariable: String ) {
      precondition(!nameOfTheVariable.isEmpty)
      //you can access nameOfTheVariable here
  }  
}

然后像下面这样使用它,

   @MyWrapper("foo") var foo: Int

注意:在 init 方法中提到 WrappedValue 是必须的。除非,它对我不起作用。

( init( wrappedValue initialValue: Double, _ nameOfTheVariable: String) )


推荐阅读