【问题标题】:Swift Protocol in Framework框架中的 Swift 协议
【发布时间】:2017-06-09 05:36:10
【问题描述】:

所以我有一个奇怪的问题,过去几个小时一直困扰着我。

我有一个框架,我在其中创建了一个名为 ChatDelegate 的协议(代码如下)

public protocol ChatDelegate: class {
   func chat(_ chatCollectionView:  UICollectionView, didSelect message: Message)
}

和一个ViewController(不在框架中),它符合ChatDelegate,就像这样

extension ChatContainerViewController: ChatDelegate {
   func chat(_ chatCollectionView: UICollectionView, didSelect message: Message) {
      print("did select")
   }
}

但编译器仍然抱怨 ChatContainerViewController 不符合协议,我不明白为什么?该函数具有完全相同的标题(我也尝试将 public 放在前面......没有帮助)。

任何帮助将不胜感激。

更新 我想到了。问题是我的项目和框架中有 Message 类,编译器不知道该选择哪一个。在前面添加 ModuleName (ModuleName.Message) 修复它。 :D

【问题讨论】:

  • 您是否委托了您的 chatCollectionView 实例?
  • 你是这个意思吗?让 chatVC = ChatViewController.viewController(); chatVC.delegate = 自我; chatContainerView.addSubviewFromViewController(chatVC, useAutoLayout: true)
  • 我也有类似的问题。我的协议是 swift 编写的,并且不会自动添加到我的 framework.h 头文件中,所以我将 .swift 文件添加到公共头文件中,但仍然找不到。 (我得到的错误是“模块“frameworkName”中没有名为“protocolname”的类型。)对此的任何帮助将不胜感激。

标签: ios frameworks delegates swift3 protocols


【解决方案1】:

我有同样的问题。定义协议的文件在框架和应用程序目标中都具有目标成员资格。我通过使定义协议的文件在框架中仅具有目标成员资格,然后将import <FrameworkName> 添加到需要使用该协议的应用程序目标中的代码来解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多