My notes on swizzling in swift.
Basic swizzling:
- Swizzling is all about replacing the static “variable method” with another static variable method.
- Bare in mind that all instances of that class also gets this new method variable
- Basically instance api stays the same. And you only set a new internal static var that the internal api calls
import Cocoa
// Only needed until we have class variables
var __SwizzleSayHello = { (who: String) -> String in
return "Hello, \(who)"
}
class Swizzle {
// Only needed until we have class variables
class var _sayHello : (String) -> String { get { return __SwizzleSayHello } set (swizzle) {__SwizzleSayHello = swizzle} }
func sayHello(who: String) -> String{
return Swizzle._sayHello(who)
}
}
let immutableInstance = Swizzle()
var mutableInstance = Swizzle()
//Both print "Hello, World"
print(immutableInstance.sayHello("World"))
print(mutableInstance.sayHello("World"))
Swizzle._sayHello = { (who: String) -> String in
return "Howdy, \(who)"
}
//Both print "Howdy, World"
print(immutableInstance.sayHello("World"))
print(mutableInstance.sayHello("World"))