有没有办法从Swift调用C例程?
很多iOS / Apple库都是只用C编写的,我仍然希望能够调用它们。
例如,我希望能够从swift调用objc运行时库。
特别是,如何桥接iOS C标头?
发布于 2014-06-03 07:16:00
编译器将C API转换为Swift,就像它对Objective-C所做的那样。
import Cocoa
let frame = CGRect(x: 10, y: 10, width: 100, height: 100)
import Darwin
for _ in 1..10 {
println(rand() % 100)
}
发布于 2016-12-29 15:34:24
在处理指针时,这似乎是一种完全不同的方式,下面是我调用C POSIX read
系统调用的方法:
enum FileReadableStreamError : Error {
case failedOnRead
}
// Some help from: http://stackoverflow.com/questions/38983277/how-to-get-bytes-out-of-an-unsafemutablerawpointer
// and https://gist.github.com/kirsteins/6d6e96380db677169831
override func readBytes(size:UInt32) throws -> [UInt8]? {
guard let unsafeMutableRawPointer = malloc(Int(size)) else {
return nil
}
let numberBytesRead = read(fd, unsafeMutableRawPointer, Int(size))
if numberBytesRead < 0 {
free(unsafeMutableRawPointer)
throw FileReadableStreamError.failedOnRead
}
if numberBytesRead == 0 {
free(unsafeMutableRawPointer)
return nil
}
let unsafeBufferPointer = UnsafeBufferPointer(start: unsafeMutableRawPointer.assumingMemoryBound(to: UInt8.self), count: numberBytesRead)
let results = Array<UInt8>(unsafeBufferPointer)
free(unsafeMutableRawPointer)
return results
}
https://stackoverflow.com/questions/24004732
复制相似问题