2017-07-18 20 views
1

ここでは、目的のCからswiftに関数を追加しようとしましたが、ここではhttps://stackoverflow.com/a/29440193/7395969のように呼び出しメソッドをSwiftに変換しました。しかし、私はエラーが発生します:'in_addr_t'(別名 'UInt32')の値を期待される引数型 'UnsafeMutablePointer!'に変換できません。この行のLET R:のIntswift 'in_addr_t'(別名 'UInt32')の値を期待される引数型 'UnsafeMutablePointer <in_addr_t>!'に変換できません。

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! 
} 

答えて

2

あなたは&と引数 INOUTとしてgatewayaddr.s_addrアドレスを渡す必要があります。またgatewayaddrを初期化する必要があります:

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

注文字列補間

ipString = "\(inet_ntoa(gatewayaddr))" 

あなたがString(cString:)を呼び出す必要があり 、スウィフトStringにCの文字列を変換するために動作しないこと。また、

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") 
} 
+0

あなたは、今、エラーがなくなってありがとう、私は、私は通常のゲートウェイIP addresssに変換する必要がありますどのように、このオプション(0x00000001af342ca0)のような値を取得しますか? –

+0

@EgleMatutyte:更新を参照してください。 –

+0

仲間ありがとう、完璧に働く、それは私が数日間探していたものです! –

関連する問題