swift的定时器拓展 代码中运用到了runtime的属性绑定 核心代码为
extension CADisplayLink {
// RunTime绑定的键值
struct UnSafePointString {
static let key = UnsafeRawPointer(bitPattern: "closures".hashValue)
}
// RUntime进行属性绑定
static var closures : ((CADisplayLink) -> Void)? {
get {
return objc_getAssociatedObject(self, UnSafePointString.key!) as? (CADisplayLink) -> Void
}
set(newValue) {
objc_setAssociatedObject(self, UnSafePointString.key!, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY_NONATOMIC)
}
}
//定时器的创建
static func creatDisplayLink(action:((CADisplayLink) -> Void)?) -> CADisplayLink{
self.closures = action
let displayLinks = CADisplayLink(target: self, selector: #selector(startTime(_:)))
displayLinks.add(to: RunLoop.main, forMode: RunLoopMode.commonModes)
return displayLinks
}
// 闭包回调 实现计时
@objc static func startTime(_ displayLink:CADisplayLink){
if let clo = closures {
clo(displayLink)
}
}
// 定时器的销毁
func removeFromRunLoop() {
self.invalidate()
}
}
尝试加入了pod支持: pod 'DisplayLinkExtension', '~> 0.0.1'
附加上github的demo链接https://github.com/xc19930909yu/CADisplayLinkDemo.git