Skip to content

Instantly share code, notes, and snippets.

@noahsark769
Created May 10, 2020 21:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save noahsark769/ddee2e7d8f4fc9347ba1d9a66fbac058 to your computer and use it in GitHub Desktop.
Save noahsark769/ddee2e7d8f4fc9347ba1d9a66fbac058 to your computer and use it in GitHub Desktop.
Nested property wrappers with Swift
// https://noahgilmore.com/blog/nesting-property-wrappers
import Cocoa
protocol Appendable {
func appending(string: String) -> Self
}
extension String: Appendable {
func appending(string: String) -> String {
return self + string
}
}
@propertyWrapper
struct Appending<T: Appendable> {
private(set) var value: T
let toAppend: String
var wrappedValue: T {
get { value }
set { value = newValue.appending(string: toAppend) }
}
init(wrappedValue: T, _ toAppend: String) {
self.value = wrappedValue
self.toAppend = toAppend
}
}
extension Appending: Appendable {
func appending(string: String) -> Appending<T> {
return Appending(wrappedValue: self.wrappedValue.appending(string: string), self.toAppend)
}
}
struct Test {
@Appending("!")
@Appending("?")
var name: String = ""
init(_ name: String) {
self.name = name
}
}
var a = Test("Noah")
print(a.name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment