Swift 语法:CGPDFDocument.getVersion 中的 UnsafeMutablePointers

Swift syntax: UnsafeMutablePointers in CGPDFDocument.getVersion

谁能解释一下我应该如何在 Swift 中为 CGPDFDocument 使用方法 'getVersion'? Apple 的文档给出:

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

"On return, the values of the majorVersion and minorVersion parameters are set to the major and minor version numbers of the document respectively."

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

你这样使用它:

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