首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Swift中的sysctlbyname()

使用Swift中的sysctlbyname()
EN

Stack Overflow用户
提问于 2014-08-24 06:52:24
回答 2查看 7.4K关注 0票数 26

我使用this Gist中的代码来确定我的应用程序运行在哪个iOS设备(例如iPhone5,1)上:

代码语言:javascript
复制
- (NSString *)platform
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

The Swift documentation表明C数据类型得到了很好的支持,但它并没有提到任何关于C函数的内容。有没有一种纯Swift的方法来检索机器标识符,或者我必须桥接到Objective-C才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-24 07:23:14

您可以在Swift中执行相同的操作(为简洁起见,省略了错误检查):

代码语言:javascript
复制
func platform() -> String {
    var size : Int = 0 // as Ben Stahl noticed in his answer
    sysctlbyname("hw.machine", nil, &size, nil, 0)
    var machine = [CChar](count: size, repeatedValue: 0)
    sysctlbyname("hw.machine", &machine, &size, nil, 0)
    return String.fromCString(machine)!
}

Swift 3的更新:

代码语言:javascript
复制
func platform() -> String {
    var size = 0
    sysctlbyname("hw.machine", nil, &size, nil, 0)
    var machine = [CChar](repeating: 0,  count: size)
    sysctlbyname("hw.machine", &machine, &size, nil, 0)
    return String(cString: machine)
}
票数 54
EN

Stack Overflow用户

发布于 2015-03-09 09:53:58

从Swift 1.2 (Xcode 6.3 beta-2)开始,@MartinR上面的代码需要稍微修改一下。对于第一个参数,sysctlbyname需要一个CChar数组(即C字符串),对于"size“参数需要一个Int (而不是Uint)。

代码语言:javascript
复制
func platformModelString() -> String? {
    if let key = "hw.machine".cString(using: String.Encoding.utf8) {
        var size: Int = 0
        sysctlbyname(key, nil, &size, nil, 0)
        var machine = [CChar](repeating: 0, count: Int(size))
        sysctlbyname(key, &machine, &size, nil, 0)
        return String(cString: machine)
    }
    return nil
}

编辑:针对Swift 3语法更新2017-01-04

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25467082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档