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
            }

            
        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,705评论 4 61
  • 最好不过爱情,并不是友谊,说的是男女关系。有人说朋友才是最好,没有伤感,没有分开。我是不赞同的,缘由吗?听我细细道...
    付肖飞阅读 1,405评论 0 0
  • 说话时的雾气遮住了你的脸 北方暴烈的风卷起了你的围巾 这是你 北方的冬 北方的城市,大概在10末就入冬了吧。脑中...
    来坐阅读 1,810评论 0 0
  • 原野上,你说: 原野又大又美,有风,还有你 我右手边有棵树 你靠在上面 而我在轻抚一朵攀援而上的 牵牛花 这是无数...
    李榆阅读 2,939评论 23 11
  • Sping 是开源的轻量级框架 Spring 核心主要两不分: aop: 面向切面编程,扩展功能不是修改源代码实现...
    mm_cuckoo阅读 1,526评论 0 1

友情链接更多精彩内容