测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最后发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Aaron Rasmussen 维护。
一组使用 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
。
CodedErrorType
和 CodedPropertyType
都包含一个名为 code
的属性,该属性返回 API 定义的常量。同时,它们也符合 RawRepresentable
的规范,其中默认情况下 rawValue
与 code
属性相同。
对于 OSStatus
(它是 Int32
的别名)和 UInt32
,也有扩展,可以通过它们的 codeString
属性将它们转换为四字符字符串。这里每个字符由四字节整数类型中的一个字节表示。String
精确为四个 Unicode 标量长度的字符串也可以转换为 Int32
或 UInt32
值。
LVGUtilities 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "LVGUtilities"
letvargo, [email protected]
LVGUtilities 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。