运行时 2.2.7

Runtime 2.2.7

Wesley Wickwire维护。



Runtime 2.2.7

  • 作者:
  • Wesley Wickwire

Runtime

Build Swift 5.0 CocoaPods compatible License

Runtime是一个Swift库,为您提供更多的运行时功能,包括获取类型元数据、通过反射设置属性以及为本机Swift对象构建类型。

TypeInfo

TypeInfo公开了关于原生Swift结构体、协议、类、元组和枚举的元数据。它捕获了属性、泛型类型、继承级数等。

示例

假设您有一个User结构体

struct User {
  let id: Int
  let username: String
  let email: String
}

要获取UserTypeInfo,您只需要做以下操作

let info = try typeInfo(of: User.self)

属性信息

TypeInfo对象中,它包含了一个代表该类型所有属性的PropertyInfo列表。 PropertyInfo公开了属性的名称和类型。它也允许获取和设置对象上的值。

示例

使用之前的同一个User对象,我们首先获取TypeInfo和想要获取的属性。

let info = try typeInfo(of: User.self)
let property = try info.property(named: "username")

获取值

let username = try property.get(from: user)

设置值

try property.set(value: "newUsername", on: &user)

就是这样简单!🎉

工厂

运行时还支持从其类型构建对象。支持struct和class。

构建一个User对象

let user = try createInstance(type: User.self)

函数信息

FunctionInfo暴露了关于函数的元数据。包括参数数量、参数类型、返回类型、是否可以抛出错误。

示例

func doSomething(a: Int, b: Bool) throws -> String { 
  return "" 
}

let info = functionInfo(of: doSomething)

常见问题

问:获取和设置值时是否可以无类型?(即对象被转换为Any

答:是的!整个库的设计都是考虑了无类型的工作方式。

问:创建一个新实例时,是否仍然受ARC的保护?

答:是的!已经正确设置了保留计数,这样ARC才能完成其工作。

安装

Cocoapods

运行时通过CocoaPods提供。要安装它,只需将以下行添加到您的Podfile中

pod 'Runtime'

Swift 包管理器

您可以通过在您的 Package.swift 文件中添加以下行来使用 Swift 包管理器 安装运行时:

import PackageDescription

let package = Package(
    [...]
    dependencies: [
        .Package(url: "https://github.com/wickwirew/Runtime.git", majorVersion: XYZ)
    ]
)

贡献

欢迎并鼓励贡献力量!

学习

想了解它是如何工作的?请阅读 这篇文章 了解实施情况。

想了解 Swift 内存布局?Mike Ash 就这一点做了精彩的 演讲

许可证

运行时代码根据 MIT 许可证提供。有关更多信息,请参阅 LICENSE 文件。