【问题标题】:Swift - Can't use Namespace when Framework/Module with class with same nameSwift - 当框架/模块具有相同名称的类时不能使用命名空间
【发布时间】:2017-05-09 17:39:54
【问题描述】:

环境

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'

可能的解决方案:

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

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

【问题讨论】:

    标签: swift module namespaces


    【解决方案1】:

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

    import class APIService.Item
    

    那你可以直接参考Item,不会混淆。

    classprotocolstructenumfunc 关键字(至少)适用于这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2021-12-23
      • 2012-02-27
      • 2016-01-04
      • 2011-12-01
      • 2014-11-19
      相关资源
      最近更新 更多