gpt4 book ai didi

objective-c - 无法将表达式的类型 int 转换为类型 void swift

转载 作者:行者123 更新时间:2023-11-28 05:30:00 25 4
gpt4 key购买 nike

我正在尝试一些 obj-c 代码以实现快速,这是我的 obj-c 代码:

NSString *this_device = @"";
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size + 1);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
machine[size] = 0;
NSString *machineString = [NSString stringWithFormat:@"%s", machine];

我把它转换成了 swift 代码:

 var this_device : NSString = ""
var size : size_t?
sysctlbyname("hw.machine", nil, &size!, nil, 0)
var machine = malloc(size! + 1)
sysctlbyname("hw.machine", machine, &size!, nil, 0)
machine[size] = 0 //Can not convert expression's type 'int' to type 'Void'

但我在 machine[size] = 0 处遇到错误。

我不明白这里有什么问题。

最佳答案

您的代码中有两个错误。 首先(SolaWing 已经注意到),分配的指针必须是指向 CChar(又名 Int8)的指针。这可以通过

var machine = UnsafeMutablePointer<CChar>.alloc(...)

var machine = UnsafeMutablePointer<CChar>(malloc(...))

其次size 变量不能是可选的,而是已初始化的size_t 变量作为 inout 参数传递给 sysctlbyname():

var size = size_t(0)
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = UnsafeMutablePointer<CChar>(malloc(size + 1))
sysctlbyname("hw.machine", machine, &size, nil, 0)
machine[size] = 0
let machineString = String.fromCString(machine)!
free(machine)
println(machineString)

或者,您可以创建一个 Swift 数组而不是分配内存,这样做的好处是内存会自动释放:

var size = size_t(0)
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](count: size + 1, repeatedValue: 0)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
machine[size] = 0
let machineString = String.fromCString(machine)!
println(machineString)

以上代码使用 Swift 1.2 (Xcode 6.3 beta) 编译。在 Swift 1.1 (Xcode <= 6.2) 中,size_t 必须转换为 Int

var machine = [CChar](count: Int(size) + 1, repeatedValue: 0)

machine[Int(size)] = 0

关于objective-c - 无法将表达式的类型 int 转换为类型 void swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29159882/

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