SwiftCF
March 13, 2021 ยท View on GitHub
Using CoreFoundation based framework in Swift painlessly.
Wrapped frameworks:
- CoreFoundation
- CoreGraphics
- CoreText
- ImageIO
- IOKit
- HID
- ApplicationServices
- Accessibility (
AXUIElement)
- Accessibility (
- CoreMedia
- CoreVideo
- CFNetwork
- Security
- CoreServices
- VideoToolbox
- SystemConfiguration
Usage
Dynamic casting to CoreFoundation types via the type-id mechanism.
import SwiftCF
let str: Any = "foo" as CFString
let s0 = str as? CFString
// โ๏ธ Conditional downcast to CoreFoundation type 'CFString' will always succeed
let s1: CFString = cfCast(str) // or
let s2 = cfCast(str, to: CFString.self) // or
let s3 = CFString.cast(str)
// โ
Toll-Free-Bridging
let cfStr: CFString = .from("foo")
let nsStr: NSString = cfStr.asNS()
let str: String = cfStr.asSwift()
Convenient Extensions
let str = "foo" as CFString
str.length
// Replace CFStringGetLength(str)
CFStringTokenizer.create(string: str)
// Replace ๐ฑ CFStringTokenizerCreate(kCFAllocatorDefault, str, CFRange(location: 0, length: CFStringGetLength(str)), kCFStringTokenizerUnitWord, CFLocaleGetSystem())
Swift Protocol Conformance
let arr = [1, 3.14, "foo"] as CFArray
for item in arr {
// ๐ CFArray now conforms to RandomAccessCollection.
}
Requirements
- Swift 5.0+
License
SwiftCF is available under the MIT license. See the LICENSE file.