OC和Swift(臨時)在wifi狀態下ip獲取

在app中有時會獲取當前手機的IP地址(主要在wifi下),當然主要看產品的需求;在OC的狀態下獲取是相對簡單的,但在Swift下(強類型)目前我只有一個臨時的替代方案,如果誰有更好的,希望交流一下,非常感謝。
在OC中獲取當前wifi的IP

    NSString *address = @"error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;
    success = getifaddrs(&interfaces);
    if (success == 0) {
        temp_addr = interfaces;
        while(temp_addr != NULL) {
            if(temp_addr->ifa_addr->sa_family == AF_INET) {
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
    }
    freeifaddrs(interfaces);

在Swift中獲取當前wifi下的IP

        var addresses = "error"
        var ifaddr :  UnsafeMutablePointer<ifaddrs>? = nil
        var temp_addr :  UnsafeMutablePointer<ifaddrs>? = nil
        var success :Int = 0
        success = Int(getifaddrs(&ifaddr))
        if success == 0 {
            temp_addr = ifaddr
            while temp_addr != nil {
                if (Int32((temp_addr?.pointee.ifa_addr.pointee.sa_family)!) == AF_INET) {

                    if (String(cString: (temp_addr?.pointee.ifa_name)!, encoding: .utf8) == "en0") {

                        let fucn = ((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.2)! < 0 ? -((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.2)! : ((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.2)
                        let fucn2 = ((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.3)! < 0 ? -((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.3)! : ((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.3)
                        let foo : UInt8 = UInt8(Int8.max) - UInt8(fucn!) + UInt8(Int8.max) + 2
                        let foo1 : UInt8 = UInt8(Int8.max) - UInt8(fucn2!) + UInt8(Int8.max) + 2
                        let fucn3:UInt8  = UInt8(((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.4)!)
                        let fucn4:UInt8  = UInt8(((temp_addr?.pointee.ifa_addr.pointee.sa_data)?.5)!)
                        let intString: String = "\(foo):\(foo1):\(fucn3):\(fucn4)"
                        print("intString=\(intString)")

                        addresses = intString
                    }
                    
                }

                temp_addr = temp_addr?.pointee.ifa_next
            }

            
        }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,232評論 4 61
  • 最好不過愛情,并不是友誼,說的是男女關系。有人說朋友才是最好,沒有傷感,沒有分開。我是不贊同的,緣由嗎?聽我細細道...
    付肖飛閱讀 177評論 0 0
  • 說話時的霧氣遮住了你的臉 北方暴烈的風卷起了你的圍巾 這是你 北方的冬 北方的城市,大概在10末就入冬了吧。腦中...
    來坐閱讀 277評論 0 0
  • 原野上,你說: 原野又大又美,有風,還有你 我右手邊有棵樹 你靠在上面 而我在輕撫一朵攀援而上的 牽牛花 這是無數...
    李榆閱讀 393評論 23 11
  • Sping 是開源的輕量級框架 Spring 核心主要兩不分: aop: 面向切面編程,擴展功能不是修改源代碼實現...
    mm_cuckoo閱讀 208評論 0 1