Swizzling


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"))