有谁能解释一下我应该如何使用Swift中CGPDFDocument的getVersion方法吗?
苹果的文档给出了:

func getVersion(majorVersion: UnsafeMutablePointer<Int32>,
   minorVersion: UnsafeMutablePointer<Int32>)

返回时,major version和minorVersion参数的值分别设置为文档的主版本号和次版本号
因此,我提供两个变量作为函数的参数,它们在退出时填充值吗?在调用方法之前,它们是否需要特别指向某个对象?如果返回的值是整数,为什么不直接将它们作为整数输入呢?

最佳答案

你这样使用它:

var major: Int32 = 0
var minor: Int32 = 0
document.getVersion(majorVersion: &major, minorVersion: &minor)
print("Version: \(major).\(minor)")

函数需要指针,但如果使用Int32运算符传入普通的&变量,Swift编译器就足够聪明,可以调用带有指向变量指针的函数。这在Using Swift with Cocoa and Objective-C: Interacting with C APIs中有记录。
这个函数像这样工作的主要原因可能是它是一个很老的C函数,已经导入Swift。C不支持将元组作为返回值;使用指针作为in-out参数是让函数返回多个值的一种方法。可以说,为返回类型定义自定义结构是一个更好的设计,这样函数就可以在一个类型中返回这两个值,但是这个函数的原始开发人员显然不认为这是必要的,也许是不值得怀疑的,因为这个模式在C中非常常见。

10-07 19:04
查看更多