Swift 属性包装器的一个示例

15 min read

下面是一个示例,展示了如何使用Swift属性包装器:

@propertyWrapper
struct Capitalized {
    private(set) var value: String = ""

    var wrappedValue: String {
        get { value }
        set { value = newValue.capitalized }
    }
}

struct Person {
    @Capitalized var firstName: String
    @Capitalized var lastName: String
}

var person = Person(firstName: "john", lastName: "doe")
print(person.firstName) // John
print(person.lastName) // Doe

person.firstName = "jane"
person.lastName = "smith"
print(person.firstName) // Jane
print(person.lastName) // Smith

在这个示例中,我们定义了一个名为Capitalized的属性包装器。它包装了一个名为value的私有属性,并将其初始值设置为空字符串。wrappedValue属性获取和设置包装值,并在设置新值时将其转换为首字母大写的形式。

然后,我们定义了一个名为Person的结构体,其中有两个使用@Capitalized属性包装器的属性:firstNamelastName。当我们创建Person实例时,它们的初始值将被设置为小写形式。

最后,我们测试了属性包装器的效果。在设置firstNamelastName属性时,它们的值会自动转换为首字母大写的形式,并且打印结果验证了这一点。