Swift文档表示C数据类型已得到充分支持,但对C功能没有任何说法。是否有一种纯粹的迅速方法来检索机器标识符,或者我必须为此桥接到Objective-C中?
您可以在Swift中执行相同的操作(对简洁的错误检查省略了):
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:
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)
}
String(cString:)
现在已弃用,归因于https://stackoverflow.com/a/79423711/1187415。
func platform() -> String? {
var size = 0
if sysctlbyname("hw.machine", nil, &size, nil, 0) != 0 {
return nil
}
var machine = [CChar](repeating: 0, count: size)
if sysctlbyname("hw.machine", &machine, &size, nil, 0) != 0 {
return nil
}
return String(utf8String: machine)
}
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
}
Edit:更新了2017-01-04,用于Swift3语法