RuntimeNew 2.1.5

RuntimeNew 2.1.5

[arturdev] 维护。



  • Artur Mkrtchyan

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
}

要获取 User 的 TypeInfo,您只需这样做

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)

就这么简单!🎉

工厂

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

要构建一个User对象

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

函数信息

FunctionInfo公开有关函数的元数据。包括参数数量、参数类型、返回类型以及是否会抛出错误。

示例

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

let info = functionInfo(of: doSomething)

常见问题解答

Q:在获取和设置值的时候,是否是无类型操作?(即对象被转换为Any类型)

A:是的!整个库都是设计为支持无类型操作的。

Q:创建类的新实例时是否仍然受到自动引用计数(ARC)的保护?

A:是的!引用计数被设置为正确的值,以便自动引用计数(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 文件。