LVGUtilities 2.0.1

LVGUtilities 2.0.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2017年2月
SwiftSwift 版本3.0
SPM支持 SPM

Aaron Rasmussen 维护。



  • letvargo

LVGUtilities

一组使用 Swift 编写的常用工具,主要用于作为如 LVGSwiftSimpleSoundServices 等其他项目的依赖。

动机

这个框架是一组我在开发针对各种 Audio Toolbox APIs 的 Swift 封装时开发的工具。在 Swift 中使用 C 语言 API 很尴尬,这些工具使得这一过程变得不太尴尬。

CBridgingFunctions 文件包含了一些将类对象从和到 const void C 指针转换的函数。例如,函数 toPointer(_:) 取代了以下尴尬的代码……

// object is an `AnyObject` of some type
let pointer = UnsafeMutablePointer(Unmanaged.passUnretained(object).toOpaque())

……用稍微不那么尴尬的一行替换

let pointer = toPointer(object)

toPointer(_:)fromPointer 函数分别将对象转换为 UnsafeMutablePointer 以及从该类型转换回来,而不保留或消耗对象引用。如果您想保留引用,请使用 toPointerRetain(_:)fromPointerConsume(_:) 代替。

其余的协议和类型扩展对于处理 Audio Toolbox 的许多 OSStatus 错误代码和 API 定义的常量非常有用。

例如,kAudioServicesUnsupportedPropertyError 是一个可能由 System Sound Services API 中的函数返回的 OSStatus 错误代码。它有一个 4 个字符的字符串转换 'pty?'。您可以使用 CodedErrorType 协议作为这些错误代码转换为标准 Swift ErrorType 的有用结构。在 LVGSwiftSystemSoundServices 中,kAudioServicesUnsupportedPropertyError 转换为枚举情况 .UnsupportedProperty。当抛出时,它有一个非常好的可打印描述

System Sound Services Error: Unsupported property.
    Message: A helpful message that can provide information about the context from where the error was thrown.
    Code: 285229988 ('pty?')

CodedErrorType 有一个静态方法 check(_:message:),它可以检查 OSStatus 错误代码,并在它不等于 0 时抛出一个错误,并带有一个消息来提供有关从哪里抛出错误的信息。

CodedPropertyType 类似,但它是针对表示 API 属性的 API 常量。例如,System Sound Services 使用 UInt32 常量 kAudioServicesPropertyIsUISound 来表示声音是否尊重用户关闭音效的决定。在 LVGSwiftSystemSoundServices 中,这被转换为枚举情况 .IsUISound

CodedErrorTypeCodedPropertyType 都包含一个名为 code 的属性,该属性返回 API 定义的常量。同时,它们也符合 RawRepresentable 的规范,其中默认情况下 rawValuecode 属性相同。

对于 OSStatus(它是 Int32 的别名)和 UInt32,也有扩展,可以通过它们的 codeString 属性将它们转换为四字符字符串。这里每个字符由四字节整数类型中的一个字节表示。String 精确为四个 Unicode 标量长度的字符串也可以转换为 Int32UInt32 值。

需求

  • OS X 10.10 或更高版本
  • iOS 8.0 或更高版本

安装

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

pod "LVGUtilities"

作者

letvargo, [email protected]

许可

LVGUtilities 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。