gpt4 book ai didi

swift - 如何从 CMutablePointer 取回值?

转载 作者:行者123 更新时间:2023-11-28 07:18:17 24 4
gpt4 key购买 nike

我正在尝试使用一些 C 基础 API,例如 Swift 语言中的 Launch Services,但我面临着对如何正确使用 CMutablePointer 的一些误解。我有以下代码:

var itemInfo: CMutablePointer<LSItemInfoRecord> = nil
var path: CFStringRef = "/test.txt"
var isFile: Boolean = 0

let url = CFURLCreateWithFileSystemPath(nil, path, CFURLPathStyle.CFURLPOSIXPathStyle, isFile)
let status: OSStatus = LSCopyItemInfoForURL(url, kLSRequestAllFlags, itemInfo)

它编译得很好,但是如何访问 CMutablePointer<LSItemInfoRecord> Swift 的值 LSItemInfoRecord结构类型?也许我只是错过了它,但我看不到这在 documentation 中的解释..

我还尝试了以下代码,使用 &前缀,建议 here :

var itemInfo: LSItemInfoRecord? = nil
var path: CFStringRef = "/test.txt"
var isFile: Boolean = 0

let url = CFURLCreateWithFileSystemPath(nil, path, CFURLPathStyle.CFURLPOSIXPathStyle, isFile)
let status: OSStatus = LSCopyItemInfoForURL(url, kLSRequestAllFlags, &itemInfo)

但我收到以下错误:Cannot convert the expression type 'OSStatus' to type 'inout LSItemInfoRecord?' .

我也尝试过使用非可选(var itemInfo: LSItemInfoRecord)但编译器声称 itemInfo未初始化,这显然是必需的行为。

那么,我怎样才能让它运行起来呢?

最佳答案

你必须初始化结构:

var itemInfo = LSItemInfoRecord(flags: 0, filetype: 0, creator: 0, `extension`: nil)

...

let status: OSStatus = LSCopyItemInfoForURL(url, kLSRequestAllFlags, &itemInfo)

请注意,extension 必须进行转义,因为它是 Swift 中的关键字。

编辑

一个完整的例子:

var itemInfo = LSItemInfoRecord(flags: 0, filetype: 0, creator: 0, `extension`: nil)

var path: CFStringRef = "/Applications/Safari.app"
var isFile: Boolean = 0

let url = CFURLCreateWithFileSystemPath(nil, path, CFURLPathStyle.CFURLPOSIXPathStyle, isFile)

let status: OSStatus = LSCopyItemInfoForURL(url, kLSRequestAllInfo, &itemInfo)

let statusString: String = SecCopyErrorMessageString(status, nil).takeUnretainedValue()

println("Status: \(status), \"\(statusString)\"")
println("Creator: \(itemInfo.creator)")
println("Flags: \(itemInfo.flags)")

打印

Status: 0, "No error."
Creator: 1936093801
Flags: 271599758

关于swift - 如何从 CMutablePointer 取回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com