Skip to content

Instantly share code, notes, and snippets.

@leoniralves
Created April 19, 2021 11:58
Show Gist options
  • Save leoniralves/af6f760172f589428342525e14a270df to your computer and use it in GitHub Desktop.
Save leoniralves/af6f760172f589428342525e14a270df to your computer and use it in GitHub Desktop.
Swizzle methods between two custom objects
class MyObject: NSObject {
@objc dynamic func getName(_ name: String) -> String {
return name
}
}
class FakeMyObject: NSObject {
@objc dynamic func getName(_ name: String) -> String {
return name + " concat"
}
}
class Swizzler {
func performSwizzle() {
guard let m1 = class_getInstanceMethod(
MyObject.self,
#selector(MyObject.getName(_:))
) else {
return
}
guard let m2 = class_getInstanceMethod(
FakeMyObject.self,
#selector(FakeMyObject.getName(_:))
) else {
return
}
method_exchangeImplementations(m1, m2)
}
}
let swizzler = Swizzler()
swizzler.performSwizzle()
let myObject = MyObject()
let name = myObject.getName("User")
print(name) // Result: "User concat"
let fakeMyObject = FakeMyObject()
let fakeName = fakeMyObject.getName("User")
print(fakeName) // Result: "User"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment