微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有属性包装程序的getter设置器

如何解决带有属性包装程序的getter设置器

我正在尝试将头包裹在属性包装器上。尽管作为一种概念和它带来的价值我很清楚,但我对为什么不能在以下代码中使用getter(setter)感到困惑:

我的代码

    @propertyWrapper struct Capitalized {
        var wrappedValue: String {
           get {
          return wrappedValue.capitalized 
            }
        }
        
        init(wrappedValue: String) {
            self.wrappedValue = wrappedValue.capitalized  
//error: Cannot assign to property: 'wrappedValue' is a get-only property
        }
    }

实际可用的教程代码

 @propertyWrapper struct Capitalized {
        var wrappedValue: String {
            didSet { wrappedValue = wrappedValue.capitalized }
        }
    
        init(wrappedValue: String) {
            self.wrappedValue = wrappedValue.capitalized
        }
    }
 
struct User {
        @Capitalized var firstName: String
        @Capitalized var lastName: String
    }   
    
    // John Appleseed
        var user = User(firstName: "john",lastName: "appleseed")
        
    // John Smith
        user.lastName = "smith"

据我对计算属性的理解,我将大写的包装值大写并返回,不确定为什么会出现错误,突出显示了完全相同的内容

解决方法

在代码中将wrappedValue属性定义为仅计算属性时,您将其定义为仅获取。此外,当吸气剂尝试获取其自身的值时,这将导致无限循环。

var wrappedValue: String {
    get { wrappedValue.capitalized }
}

解决方法是使用didSet方法。

var wrappedValue: String {
    didSet { wrappedValue = wrappedValue.capitalized }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。