当前位置:  开发笔记 > IOS > 正文

将Swift应用程序的组件划分为Swift模块

如何解决《将Swift应用程序的组件划分为Swift模块》经验,为你挑选了1个好方法。

我正在Swift中编写一个iOS应用程序,我正在试图弄清楚如何将项目组织成单独的模块.我正在使用MVVM架构,我想让Model,ViewModel和View组件分开Swift模块,这些模块只能使导入它们的模块可以访问它们自己的子集.View中的文件将导入ViewModel,ViewModel中的文件将导入Model.我怎么能做到这一点?请注意,我不是要创建多个应用程序可以共享的库.我只是想使用模块强制分离组件.

编辑:也许问题是,"我应该使用什么机制来创建模块,而不是初始iOS应用程序项目附带的模块?"

"如何在Swift中使用命名空间?"中的答案之一 /sf/ask/17360801/说,"类(等)是由它们所在的模块(Xcode目标)隐式确定的." 由此可以得出结论,目标对应于模块,答案是在Xcode项目中创建单独的目标,但我之前尝试过,而tskulbru说我需要多个Xcode项目.

关于多个Xcode项目,文件>新建>项目> iOS框架和库> Cocoa Touch Framework选项看起来不正确,因为它应该用于使用UIKit的东西,我想要创建的两个模块不应该依赖在UIKit上.另一个"框架和库"选项,Cocoa Touch静态库,不是Swift的选项.

使用私有Pod提到的另一个StackOverflow帖子.花了一个小时研究之后,我得出结论认为这不是正确的解决方案,因为我不应该在不同的工作空间中编辑这些模块.



1> tskulbru..:

如果不为要创建的模块创建单独的项目,则无法做到这一点.这是因为Swift处理命名空间的方式.

Eonil对我的回答比我好:https://stackoverflow.com/a/24032860/215400 (下面复制)

SevenTenEleven在Apple开发论坛上的回答:

命名空间不是每个文件; 它们是每个目标(基于"产品模块名称"构建设置).所以你最终得到这样的东西:

import FrameworkA
import FrameworkB

FrameworkA.foo()

所有Swift声明都被认为是某个模块的一部分,所以即使你说"NSLog"(是的,它仍然存在),你也会得到Swift认为的"Foundation.NSLog".

克里斯拉特纳也发布了关于命名空间的推文.

命名空间是迅速隐式的,所有的类(ETC)由模块(Xcode目标)都隐含作用域他们英寸不需要类的前缀

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有