【问题标题】:Swift PropertyWrapper. Can't initialize variable斯威夫特属性包装器。无法初始化变量
【发布时间】:2022-11-18 07:27:14
【问题描述】:

因此,我尝试创建一个属性包装器,从不需要的字符中去除电话号码并向其添加国家代码:

@propertyWrapper
struct MSISDN {

private var _wrappedValue: String

public var wrappedValue: String {
    get {
        return fullMsisdn
    }
    set {
        _wrappedValue = newValue
    }
}

private var cleaned: String {
    return cleanStr(str: _wrappedValue)
}

private var fullMsisdn: String {
    return withCountryCode(cleaned)
}

private func cleanStr(str: String) -> String {
    return str.replacingOccurrences(of: "[ \\-()]", with: "", options: [.regularExpression])
}

private func withCountryCode(_ msisdn: String) -> String {
    guard msisdn.count == 10 && msisdn.starts(with: "69") else { return msisdn }
    
    return "+30\(msisdn)"
}

init(wrappedValue: String) {
    self._wrappedValue = wrappedValue
}

现在,当我尝试创建这样的 var @MSISDN var msisdn: String = "69 (4615)-11-21" 我收到以下错误

error: msisdn.playground:71:17: error: closure captures '_msisdn' before it is declared
    @MSISDN var ms: String = "69 (4615)-11-21"
                ^

msisdn.playground:71:17: note: captured value declared here
    @MSISDN var msisdn: String = "69 (4615)-11-21"
            ^

如果我尝试像下面这样分两步进行,一切正常。

@MSISDN var msisdn: String
msisdn = "69 (4615)-11-21"

谁能帮我一个大忙,帮我分解一下?

【问题讨论】:

    标签: ios swift property-wrapper


    【解决方案1】:

    从 Xcode 14.1 开始,这仍然不受支持。较新的消息是:

    Property wrappers are not yet supported in top-level code

    简单的解决方法是将您的代码放在一个结构中:

    //@MSISDN var phN = "69 (4615)-11-21"
       struct workAround {
           @MSISDN var phN = "69 (4615)-11-21"
       }
       print (workAround().phN)`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2019-09-11
      • 2018-09-01
      • 1970-01-01
      • 2017-07-22
      • 2017-03-24
      • 2020-05-27
      相关资源
      最近更新 更多