Property
@propertyWrapper
public struct Property<T>
A property wrapper which allows ClassHook
types to add new properties to their
hooked class.
This type is an ergonomic wrapper around Objective-C associated objects. The
type of the associated object is the generic argument T
.
If you are declaring a property on a ClassHook
, you likely want to use this.
Note that this property only works on types which conform to ClassHook
.
Important
All properties with this attribute must have a default value.Attributes
This property wrapper gives you the ability to specify attributes on the
property, which are similar to those used by Objective-C’s @property
. For
a description of each attribute, see Property.Assign
, Property.Atomicity
,
and Property.RetainOrCopy
.
The default attributes are atomic
and retain
. Specifying assign
will replace both defaults, and specifying an atomicity and/or retain
policy will only override the respective default.
Example
@objcMembers class Person: NSObject {
dynamic func sayHello() -> String {
"hello"
}
}
class PersonHook: ClassHook<Person> {
@Property(.nonatomic) var x = 0
func sayHello() -> String {
x += 1
return "Hi! I've been called \(x) time(s)"
}
}
// later...
let alice = Person()
alice.sayHello() // Hi! I've been called 1 time(s)
alice.sayHello() // Hi! I've been called 2 time(s)
let bob = Person()
bob.sayHello() // Hi! I've been called 1 time(s)
bob.sayHello() // Hi! I've been called 2 time(s)