小编Jas*_*son的帖子

基于iOS Swift的动态框架中的Objective C类

情况:

我有一个用Swift编写的iOS dyanmic框架.我还有一堆用Objective C编写的类,我将在我的Swift类中使用(一些是公共的,一些是私有的).但是,我希望Objective C类不会暴露给使用我的框架的项目.


我尝试过的:

伞头

根据我的理解,我应该#import header.h在我的伞头文件中导入,这通常是FrameworkName.h,然后确保我希望包含在我的Swift类中的所有Objective C头文件都标记为"Public",在Build Phases下 - >标题.

但是,这样做会自动使用我的框架将项目公开给框架使用的所有私有Objective C类.

模块映射(带独立模块)

正因为如此,我已经研究过使用模块映射,这是记录在这里.我看过其他用户的帖子,比如这个这个,以及这个Github回购.

我成功完成了以下工作:

//SharedClasses/module.modulemap
module SharedClasses {
}

//SharedClasses/module.private.modulemap
module SharedClasses.Private {
    header "header.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

问题是在我的项目中(导入了这个框架),这个:

import Framework
import Framework.SharedClasses
Run Code Online (Sandbox Code Playgroud)

允许,然后暴露"隐藏的"Objective C类.也许这就是模块的工作原理?有没有办法让他们真正私密?

模块映射(带框架私有模块)

另外,我尝试module.private.modulemap在框架的根目录下创建一个文件,其中包含以下内容:

explicit module Framework.Private {
    header "header.h"
    export *
}
Run Code Online (Sandbox Code Playgroud)

然后在MODULEMAP_PRIVATE_FILE下链接我的目标的构建设置.但是,当我import Framework.Private在我的框架的Swift类中执行时,会抛出编译器错误:

"没有这样的模块'Framework.Private'

我不明白为什么会出现这种错误.

模块映射(带私有头)

我注意到在Clang文档中,private提到了一个说明符: …

frameworks module clang ios swift

20
推荐指数
1
解决办法
2391
查看次数

使用未解析的标识符“ UIUserInterfaceIdiomPad”

我使用Xcode 7.2创建了一个新的基于Swift的项目。在ViewController.swift文件的viewDidLoad()方法中编写以下代码后:

if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad {

}
Run Code Online (Sandbox Code Playgroud)

我收到错误消息“使用未解决的标识符'UIUserInterfaceIdiomPad'”,并且编译器将无法继续。

我怀疑这与顶部的“导入UIKit”有关吗?由于某种原因,如果我删除该行并开始输入“ import UI”,则根本不提供自动完成选项。

我尝试过的事情:

  • 重新启动计算机和Xcode
  • 删除派生数据文件夹
  • 在Swift中创建一个新项目
  • 在基于Objective-C的项目中尝试代码(可行!)

问题:

  • 为什么会收到此错误消息?
  • 为什么“导入UIKit”不会自动完成?

谢谢!

xcode swift xcode7

1
推荐指数
1
解决办法
1704
查看次数

标签 统计

swift ×2

clang ×1

frameworks ×1

ios ×1

module ×1

xcode ×1

xcode7 ×1