封装监听方法耗时操作
开始算法练习之旅
基类 Core.swift
import Foundation
class Core: NSObject {
required override init() {
super.init()
swizzle_class(clz: object_getClass(self), originalSelector: #selector(run), swizzledSelector: #selector(run_swizzle))
}
@objc dynamic func run() {
fatalError("需实现run方法并且不要调用父类方法")
}
@objc dynamic func run_swizzle() {
print("开始执行 --> \\(object_getClass(self)!)")
let startTimeInterval = Date().timeIntervalSince1970 * 1000
run_swizzle()
let endTimeInterval = Date().timeIntervalSince1970 * 1000
print(String(format: "运行耗时 --> %.3f毫秒", endTimeInterval - startTimeInterval))
}
@objc static func run() {
let object = self.init()
object.run()
}
}
func swizzle_class(clz: AnyClass?, originalSelector: Selector, swizzledSelector: Selector) {
let originalMethod = class_getInstanceMethod(clz, originalSelector)
let swizzledMethod = class_getInstanceMethod(clz, swizzledSelector)
let didAddMethod: Bool = class_addMethod(clz, originalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
if didAddMethod {
class_replaceMethod(clz, swizzledSelector, method_getImplementation(originalMethod!), method_getTypeEncoding(originalMethod!))
} else {
method_exchangeImplementations(originalMethod!, swizzledMethod!)
}
}
调用方 main.swift
剑指_Offer_09_用两个栈实现队列.run()
算法实现类
class CQueue {
private var stackAdd: [Int]
private var stackRemove: [Int]
init() {
stackAdd = []
stackRemove = []
}
func appendTail(_ value: Int) {
if stackAdd.count > 10000 {
// fatalError("数据太多")
}
stackAdd.append(value)
}
func deleteHead() -> Int {
if stackAdd.isEmpty {
return -1
} else {
stackRemove = stackAdd.reversed()
}
stackAdd.removeFirst()
return stackRemove.removeLast()
}
}
class 剑指_Offer_09_用两个栈实现队列: Core {
override func run() {
let obj = CQueue()
print(obj.deleteHead())
obj.appendTail(5)
obj.appendTail(2)
print(obj.deleteHead())
print(obj.deleteHead())
}
}
在
Swift中实现方法交换须满足条件:
NSObjectdynamic关键字标记