swift 无法将 'in_addr_t' 类型的值(又名"UInt32")转换为预期的参数类型 'UnsafeMutablePointer<in_addr_t>!'



我尝试将函数从目标 c 添加到 swift 中,就像这里一样 https://stackoverflow.com/a/29440193/7395969 我将调用方法转换为 Swift,如下所示。但是我收到错误:无法将类型"in_addr_t"(又名"UInt32"(的值转换为预期的参数类型"不安全的可变指针!

func getGatewayIP() -> String {
var ipString: String? = nil
let gatewayaddr: in_addr
let r: Int = getdefaultgateway((gatewayaddr.s_addr))
if r >= 0 {
ipString = "(inet_ntoa(gatewayaddr))"
print("default gateway : (ipString)")
}
else {
print("getdefaultgateway() failed")
}
return ipString!
}

你必须传递gatewayaddr.s_addr的地址作为inout参数 与&.此外,还必须初始化gatewayaddr

var gatewayaddr = in_addr()
let r = getdefaultgateway(&gatewayaddr.s_addr)

请注意,字符串插值

ipString = "(inet_ntoa(gatewayaddr))"

将无法将 C 字符串转换为 SwiftString, 你必须打电话给String(cString:).也

return ipString!

如果无法确定网关,将崩溃。

安全版本示例:

func getGatewayIP() -> String? {
var gatewayaddr = in_addr()
let r = getdefaultgateway(&gatewayaddr.s_addr)
if r >= 0 {
return String(cString: inet_ntoa(gatewayaddr))
} else {
return nil
}
}
if let gateway = getGatewayIP() {
print("default gateway", gateway)
} else {
print("getGatewayIP() failed")
}

最新更新