我在swift 1.1中使用了这段代码 不知道如何解决它
var deviceModelIdentifier: String {
var size : UInt = 0 // Swift 1.2: var size : Int = 0 (as Ben Stahl noticed in his answer)
//sysctlbyname(_: UnsafePointer<Int8>, _: UnsafeMutablePointer<Void>, _: UnsafeMutablePointer<Int>, _: UnsafeMutablePointer<Void>, _: Int)
sysctlbyname("hw.machine", nil, &size, nil, 0)
var machine = [CChar](count: Int(size), repeatedValue: 0)
sysctlbyname("hw.machine", &machine, &size, nil, 0)
return String.fromCString(machine)!
}
错误:无法使用类型为'(String,nil,inout UInt,nil,Int)'的参数列表调用'sysctlbyname' sysctlbyname(“hw.machine”,nil,&amp; size,nil,0) ^ 错误:无法使用类型'(String,inout [(CChar)],inout UInt,nil,Int)的参数列表调用'sysctlbyname'' sysctlbyname(“hw.machine”,&amp; machine,&amp; size,nil,0)
感谢任何帮助
答案 0 :(得分:4)
解决方案在您的代码中的注释中:大小现在是Int
而不是1.2中的Uint
,因此编译:
var deviceModelIdentifier: String {
var size : Int = 0
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)!
}
(如果您愿意,也可以写var size : size_t = 0
)
当您浏览不安全的指针锅炉板时,错误消息提示:
注意:期望一个类型'的参数列表'(UnsafePointer&lt; Int8&gt;, UnsafeMutablePointer&LT; Void&gt;,UnsafeMutablePointer&lt; Int &gt;, UnsafeMutablePointer&LT; Void&gt;,Int)'
答案 1 :(得分:0)
Swift 4.0版
var deviceModel: String {
var size : Int = 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, encoding: .utf8)!
}