Swift - 当Framework / Module具有相同名称的类

时间:2016-12-24 07:14:53

标签: swift module namespaces

环境

Swift> = 2.3,Swift应用程序中的Swift框架

设定:

  • 一个带模块名称的Swift动态框架,让我们说吧 APIService.framework
  • 它有一个public class APIService.swift 有静态功能。
  • 它有另一个public class Item.swift

  • 使用APIService.framework

  • 的快速应用程序
  • App可以使用APIService.function()
  • 等框架
  • App也有class Item.swift

如果App需要引用框架的Item类,它必须执行APIService.Item但是由于APIService是框架内的类,编译器总是试图在APIService类中而不是在APIService模块中查找属性,因此抛出错误说

'Item' is not a member type of 'APIService'

可能的解决方案:

  • 将框架的模块名称更改为类以外的名称 名称。
  • 将班级名称更改为“模块名称”以外的名称。
  • 放一个" Item" APIService类中指向
    的静态属性 框架中的项目类。

所有这些只是解决方法,真正的问题仍然是编译器无法区分模块名称和类名。我们在Swift中有什么可以说"Don't look into the ModuleName.swift, instead look into the whole Module"吗?

1 个答案:

答案 0 :(得分:0)

基于this answer,您可以直接从模块导入单个类型来解决此问题。

import class APIService.Item

然后您可以直接引用Item而不会产生混淆。

classprotocolstructenumfunc关键字(至少)可以在这种情况下工作。