【问题标题】:Swift syntax: UnsafeMutablePointers in CGPDFDocument.getVersionSwift 语法:CGPDFDocument.getVersion 中的 UnsafeMutablePointers
【发布时间】:2017-04-17 08:54:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: swift cocoa unsafemutablepointer


    【解决方案1】:

    你可以这样使用它:

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

    该函数需要指针,但如果您使用 &amp; 运算符传入普通的 Int32 变量,则 Swift 编译器足够智能,可以使用指向变量的指针调用函数。这在Using Swift with Cocoa and Objective-C: Interacting with C APIs 中有记录。

    函数像这样工作的主要原因可能是它是一个非常古老的 C 函数,已经导入到 Swift 中。 C 不支持元组作为返回值;使用指针作为输入输出参数是一种让函数返回多个值的方法。可以说,为返回类型定义一个自定义结构会是一个更好的设计,这样函数就可以在一个类型中返回两个值,但是这个函数的原始开发人员显然认为没有必要——也许不足为奇,因为这种模式在 C 语言中很常见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多