SwiftSwift Swizzling的基础
示例
让我们交换的实现methodOne(),并methodTwo()在我们的TestSwizzling类:
class TestSwizzling : NSObject {
dynamic func methodOne()->Int{
return 1
}
}
extension TestSwizzling {
//在Objective-C中,您需要在load()中执行扫描,
//但是Swift中不允许使用此方法
override class func initialize()
{
struct Inner {
static let i: () = {
let originalSelector = #selector(TestSwizzling.methodOne)
let swizzledSelector = #selector(TestSwizzling.methodTwo)
let originalMethod = class_getInstanceMethod(TestSwizzling.self, originalSelector);
let swizzledMethod = class_getInstanceMethod(TestSwizzling.self, swizzledSelector)
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
let _ = Inner.i
}
func methodTwo()->Int{
//混乱后不再是递归调用
return methodTwo()+1
}
}
var c = TestSwizzling()
print(c.methodOne())
print(c.methodTwo())
热门推荐
10 告别祝福语长篇简短
11 给母校送花祝福语简短
12 如何问候生日祝福语简短
13 感谢室友毕业祝福语简短
14 单位生日庆祝祝福语简短
15 老婆生日祝福语有趣简短
16 同学朋友吃饭祝福语简短
17 歌词朋友结婚祝福语简短
18 夏至问候客户祝福语简短