本小节主要用过调用c中的qsort
函数来做字符串排序的Demo, 并且讲了每一个参数的含义。
具体demo如下。
public func qsort(
_ __base: UnsafeMutableRawPointer!,
_ __nel: Int,
_ __width: Int,
_ __compar: @escaping @convention(c) (UnsafeRawPointer?,
UnsafeRawPointer?)
-> Int32)
func qsortStrings(array: inout [String]) {
qsort(&array, array.count, MemoryLayout<String>.stride) { a, b in
let l = a!.assumingMemoryBound(to: String.self).pointee
let r = b!.assumingMemoryBound(to: String.self).pointee
if r > l {
return -1
}else if r == l {
return 0
} else {
return 1
}
}
}
· 第一个参数
指向数组首个元素的指针
。这和使用 Swift 函数的 inout 参数的规则是一样的。
· 第二个参数
元素的个数
。数组的count属性就可以了。
· 第三个参数
元素的宽度
,使用了MemoryLayout.stride
获取,而不是用MemoryLayout.size
(由于空隙宽度的原因可能会不准确)。
· 最后一个参数 一个指向C函数的指针,这个C函数用来比较数组中的两个元素。
书中还提到了block 并不是 C 标准的一部分 (来自wiki)感兴趣的同学可以瞅瞅。
全书over🌜🌛~