Skip to content
forked from ddddxxx/SwiftCF

Use CoreFoundation based framework in Swift painlessly.

License

Notifications You must be signed in to change notification settings

loveq369/SwiftCF

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SwiftCF

Github CI Status

Using CoreFoundation based framework in Swift painlessly.

Wrapped frameworks:

  • CoreFoundation
  • CoreGraphics
  • CoreText
  • ImageIO
  • IOKit
    • HID
  • ApplicationServices
    • Accessibility (AXUIElement)
  • 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.

About

Use CoreFoundation based framework in Swift painlessly.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 100.0%