1

谁能解释我应该如何在 Swift 中为 CGPDFDocument 使用方法“getVersion”?苹果的文档给出:

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

“返回时,majorVersion 和 minorVersion 参数的值分别设置为文档的主要和次要版本号。”

所以我提供了两个变量作为函数的参数,它们在退出时填充了值?在调用方法之前,他们是否需要特别指出某些东西?如果返回值是这样,为什么不直接将它们输入为整数呢?

4

1 回答 1

1

你像这样使用它:

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 不支持元组作为返回值;使用指针作为输入输出参数是一种让函数返回多个值的方法。可以说,为返回类型定义一个自定义结构会是一个更好的设计,这样函数就可以在一个类型中返回两个值,但是这个函数的原始开发人员显然认为没有必要——也许不足为奇,因为这种模式在 C 中很常见。

于 2017-04-17T09:04:12.763 回答