@convention 在 Swift2.0 中引入,用于修饰函数类型,它指出了函数调用的约定。

  • @convention(swift)
    表明是 swift 的闭包
  • @convention(block)
    匹配 Objective-C 方法参数中的 block 参数
  • @convention(c)
    匹配 C 函数参数中的函数指针

@convention(c)

1
2
3
4
5
/// Objc
/// 定义了一个C函数,callback是一个函数指针
CGFloat myCFunction(CGFloat (callback)(CGFloat x, CGFloat y)) {
return callback(10, 20);
}
1
2
3
4
5
6
7
8
9
10
/// Swift
/// 第一种调用 myCFunction
let callback: @convention(c) (CGFloat, CGFloat) -> CGFloat = {
return $0 + $1
}
let value = myCFunction(callback)
print(value)
/// 直接实现
let value1 = myCFunction { $0 + $1 }
print(value)