加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Swift Framework中的ifaddrs

发布时间:2020-12-14 05:25:31 所属栏目:百科 来源:网络整理
导读:由于框架不支持桥接头,如何将ifaddrs.h导入框架内的 swift文件? 或者是否有其他方法可以在局域网上获取设备IP地址,这将适用于iOS和OS X? 在应用程序目标中,桥接标头可以解决问题.在框架目标内部,事情比较棘手.在 Swift代码中,我们只能导入所谓的模块.诀窍
由于框架不支持桥接头,如何将ifaddrs.h导入框架内的 swift文件?

或者是否有其他方法可以在局域网上获取设备IP地址,这将适用于iOS和OS X?

在应用程序目标中,桥接标头可以解决问题.在框架目标内部,事情比较棘手.在 Swift代码中,我们只能导入所谓的模块.诀窍是定义一个模块映射,通过将构建设置(Build Settings-> Swift Compiler-> Import Paths)中的SWIFT_INCLUDE_PATHS设置为模块映射文件的路径,提供所需的C库资源并使其可见.有两种方法可以做到这一点:

1)以下允许通过直接公开ifaddrs.h接口来实现纯粹的swift实现,但遗憾的是需要一个精确的头文件路径,如果您要将库作为开源发布,这是不可取的.

module.modulemap

module ifaddrs [system] {
    header
"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include/ifaddrs.h"
    export *
}

添加到swift代码

import ifaddrs

2)第二种方法是创建一个Objective-C类,它为ifaddrs.h提供一个接口,但隐藏ifaddrs.h的实际导入源* .m文件.

NetworkTools.h

@interface NetworkTools : NSObject

+ (NSDictionary *)getIFAddresses;

@end

NetworkTools.m

#import "NetworkTools.h"
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <netdb.h>

@implementation NetworkTools

+ (NSDictionary *)getIFAddresses {
    NSDictionary *addresses;
// code
    return addresses;
}

module.modulemap

module NetworkTools {
    header "Obj-C Tools/NetworkTools.h"
    export *
}

添加到swift代码

import NetworkTools

有关这一切如何协同工作的更多信息,请查看:

Github上的示例项目:https://github.com/danieleggert/mixed-swift-objc-framework

以及关于Clang模块的文章:http://clang.llvm.org/docs/Modules.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读