ObjectiveKit 0.2.0

ObjectiveKit 0.2.0

测试已测试
Lang语言 SwiftSwift
许可证 MIT
Released最新发布2016年11月
SwiftSwift 版本3.0
SPM支持 Swift Package Manager (SPM)

Roy Marmelstein 维护。



ObjectiveKit - Swift friendly ObjC-Runtime functions

ObjectiveKit

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)

设置

灵感来源