gpt4 book ai didi

swift - 在 Swift 中初始化 C 结构

转载 作者:可可西里 更新时间:2023-11-01 02:28:14 26 4
gpt4 key购买 nike

我在从 Swift 调用 statfs() 时遇到问题。该调用使用一个也名为 statfs 的结构作为参数,而 swift 编译器似乎混淆了两者。

此代码告诉我该结构未初始化,因此无法编译:

var sb : statfs
if(statfs(fd, &sb) == 0)
{
//...
}

但是当我尝试初始化结构时(我尝试过“var sb : statfs = statfs()”和“var sb : statfs = statfs(f_bsize: 0, f_iosize: 0, ...)”),它告诉我参数不匹配,它似乎在寻找函数的参数而不是结构。

所以,我猜一定是我缺少一些语法糖让编译器意识到它应该查看结构而不是函数。

我有一个类似的命名问题,更麻烦的是:我想要一个名为 open() 的类,它调用 posix 命令 open(),但我无法让编译器意识到我想要调用 posix 命令而不是我自己的方法。我通过简单地重命名我的方法来解决这个问题,但必须有一些语法让编译器知道当存在多个同名项目时你指的是哪个项目。

最佳答案

问题是 Swift 将函数名称和结构名称都导入为 statfs。您可以通过类型别名消除它们的歧义。

/// universal initializer
func blankof<T>(type:T.Type) -> T {
var ptr = UnsafeMutablePointer<T>.alloc(sizeof(T))
var val = ptr.memory
ptr.destroy()
return val
}
import Darwin
typealias StatFS = statfs // this does the trick
var fs = blankof(StatFS)
println(statfs("/", &fs))
println(fs.f_ffree)

关于swift - 在 Swift 中初始化 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25110111/

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