What is Property Wrapper
Property wrapper are a language feature that allows you to wrap a piece of code around a property in Swift world, which can help us to add additional behavior or functionality to that property. The benefits of it is to reduce the code repetition.
Property wrapper is defined using the @
symbol, followed by the name of the property wrapper. It is not something magic, here's an example of a simple property wrapper called Trimmed
that trims leading and trailing whitespace from a string:
@propertyWrapper
struct Trimmed {
private(set) var wrappedValue: String
init(wrappedValue: String) {
self.wrappedValue = wrappedValue.trimmingCharacters(in: .whitespaces)
}
}
You can use this property wrapper by applying it to a property like this:
struct Person {
@Trimmed var name: String
}
let person = Person(name: " First Name, Last Name ")
print(person.name)
// output:
//First Name, Last Name
Property wrappers are a useful tool for adding functionality to properties in a concise and reusable way. They are often used for things like value validation, data formatting, and thread synchronization.
Common property wrappers
As you may observed already, there are some existing property wrappers which we already talked in the previous articles:
Test property wrapper
To test above property wrapper:
import XCTest
class TrimmedTests: XCTestCase {
func testTrimmed() {
let person = Person(name: " John Smith ")
XCTAssertEqual(person.name, "John Smith")
}
struct MockPerson {
@Trimmed var name: String
}
}