测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released最新发布 | 2016年11月 |
SwiftSwift 版本 | 3.0 |
SPM支持 Swift Package Manager (SPM) | ✓ |
由 Roy Marmelstein 维护。
ObjectiveKit 为一系列强大的 Objective-C 运行时功能提供了一组对 Swift 友好的 API。
要使用 ObjectiveKit
在 Swift 文件的顶部导入 ObjectiveKit
import ObjectiveKit
下一步是创建一个 ObjectiveClass 对象,该对象针对您想修改或内省的类
let viewClass = ObjectiveClass<UIView>()
如果您在自定义 Swift 类上使用 ObjectiveKit,请确保它在某个地方继承自 NSObject,并且使用了 @objc 标志暴露给了 Objective-C 运行时。
您可以使用以下方便的内省方法了解更多关于运行时类的信息
let mapViewClass = ObjectiveClass<MKMapView>()
let ivars = mapViewClass.ivars // An array of ivars.
let selectors = mapViewClass.selectors // An array of selectors.
let properties = mapViewClass.properties // An array of properties.
let protocols = mapViewClass.protocols // An array of protocols.
将来自另一个类的预存在选择器添加到您的 ObjectiveClass
let viewClass = ObjectiveClass<UIView>()
viewClass.addSelector(#selector(testSelector), from: self.classForCoder)
let view = UIView()
view.perform(#selector(testSelector))
通过提供一个带有闭包的实现来添加自定义方法
let viewClass = ObjectiveClass<UIView>()
viewClass.addMethod(closureName, implementation: {
print("hello world")
})
let view = UIView()
view.performMethod(closureName)
ObjectiveKit 还支持在同一个类中交换选择器
let viewClass = ObjectiveClass<UIView>()
viewClass.exchangeSelector(#selector(UIView.layoutSubviews), with: #selector(UIView.xxx_layoutSubviews))
最后,您还可以在运行时创建一个自定义的 Objective-C 类
let runtimeClass = RuntimeClass(superclass: UIView.self)
runtimeClass.addIvar(ivarName, type: .Float)
let runtimeObject = runtimeClass.allocate()
runtimeObject.setValue(4.0, forKey: ivarName)