Skip to content

Instantly share code, notes, and snippets.

@apple-avadhesh
Last active December 27, 2021 08:27
Show Gist options
  • Save apple-avadhesh/aac12e7fe35dc5f7ab2b3fc29ce463e0 to your computer and use it in GitHub Desktop.
Save apple-avadhesh/aac12e7fe35dc5f7ab2b3fc29ce463e0 to your computer and use it in GitHub Desktop.
Struct Chain Calls
// Approach 1 - [https://stackoverflow.com/a/70492824/6576315]
struct Employee {
var name: String?
var designation: String?
func name(_ name: String) -> Employee {
.init(name: name, designation: self.designation)
}
func designation(_ designation: String) -> Employee {
.init(name: self.name, designation: designation)
}
}
// Approach 2 - https://stackoverflow.com/a/62350778/6576315
// Approach 3 - Dynamic Member Lookup
@dynamicMemberLookup
struct Setter<Subject> {
let subject: Subject
subscript<Value>(dynamicMember keyPath: WritableKeyPath<Subject, Value>) -> ((Value) -> Setter<Subject>) {
var subject = self.subject
return { value in
subject[keyPath: keyPath] = value
return Setter(subject: subject)
}
}
}
struct Employee {
var name: String?
var designation: String?
}
let emp = Setter(subject: Employee())
.designation("iOS Engineer")
.name("Speedy")
.subject
print(emp.designation)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment