协议中的 Swift 协议属性 - 候选者具有不匹配的类型

2023-11-30

我有一个协议 (ProtocolA),其中包含符合第二个协议 (ProtocolB) 的单个属性。

public protocol ProtocolA {        
    var prop: ProtocolB? { get }
}

public protocol ProtocolB {        
}

我试图声明两个类来实现这些:

private class ClassA : ProtocolA {    
    var prop: ClassB?
}

private class ClassB : ProtocolB {
}

但我收到一个错误:

类型“类”不符合协议“协议”

协议需要类型为“ProtocolB?”的属性“prop”

候选人的类型“B 类?”不匹配

这很烦人,因为 B 类符合协议。

在过去,我可能只是将财产声明为:

@property (nonatomic) ClassB <ProtocolB> *prop;

但似乎我可以快速解决这个问题的唯一方法是添加一个 ivar,例如:

private class ClassA : ProtocolA {        
    var _prop: ClassB?
    var prop: ProtocolB? { return _prop }
}

难道就没有办法解决这个问题吗?


您需要声明一个typealias符合其他协议的类型。你这样做的方式是这样的prop类型必须准确ProtocolB,但你实际上并不想要这样,你想要一个符合它的类型。

protocol ProtocolA {
    typealias Prop : ProtocolB
    var prop: Prop? { get }
}

protocol ProtocolB {}


class ClassA : ProtocolA {
    var prop: ClassB?
}

class ClassB : ProtocolB {}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

协议中的 Swift 协议属性 - 候选者具有不匹配的类型 的相关文章

随机推荐

  • 绘制动画 openlayers 线串路径

    我在上面看到了一个令人印象深刻的映射示例http jerusalem com map tour the way of the cross location abu jaafar 有人如何使用 openlayers 在点的绘制路径上完成类似的
  • 如何返回这个数组中唯一不重复的值? [复制]

    这个问题在这里已经有答案了 我有一个关于 Javascript 的问题 这是以下数组 1 0 0 0 0 0 0 我想返回唯一不重复的值 即1 有什么建议么 我有这个 var result arr filter x gt arr index
  • Windows Phone 导航 - 返回之前的页面

    我想点击一个按钮将我带到一个页面 然后单击一个列表框项 单击新页面上的按钮并将其传回之前的页面 而无需创建第一页的新 URI First Page private void btnAddExistingMember Click object
  • 如何从 JSON 字符串中提取单个元素?

    我想从下面给出的数据中提取值 屏幕名称 姓名 ID 个人资料图片 URL id str 135977294 description 4TechCareers is the u2018insiders u2019 view of TechCa
  • OnClick 用于谷歌分析和目标 _blank。链接失效了?

    a href http example com test html class noFloat target blank Click Me a 我对这段代码有疑问 不返回 false 我有一个新窗口 没关系 但相同的网址也在同一个父窗口中打
  • 禁止打印 REPL 中原子保存的数据? (或参考人、代理人……)

    以下是完全有效的 Clojure 代码 def a atom nil def b atom a reset a b 它甚至在需要反向引用的情况下很有用 然而 在 REPL 中处理这些东西很烦人 每当您键入 a 或 b 时 REPL 都会尝试
  • 如何创建 Directshow 过滤器?

    我想创建一个软件 作为视频流 H264 输入 来自另一个软件 输出为网络摄像头 供我的朋友可以在 Skype yahoo 或类似的设备中观看 我知道我需要创建 directshow 过滤器才能做到这一点 但我不知道必须创建什么类型的过滤器
  • 如何支持 CMake 中 Makefile 的构建时变量?

    虽然我已经完成了一些多平台 例如嵌入式与主机运行时环境 CMake 项目 但我有一个看似简单的用例 但我无法完全弄清楚 我所知道的典型 CMake 用法是这样的 mkdir
  • 如何为 StatEt Eclipse 插件的帮助视图索引 R 库?

    当我显示 StatEt Eclipse 插件的 R Help 视图时 出现以下错误 HTTP ERROR 404 Problem accessing rhelp browse default workbench Reason The R l
  • 如何将回调附加到 Google 应用制作工具中的自定义确认对话框?

    我正在 Google App Maker 中创建自定义确认对话框 并希望使用 确认 按钮来调用传入的函数 我在按钮小部件中没有看到 onclick 事件 关于如何执行此操作有什么建议吗 function confirmationDialog
  • 使用 MATLAB 将 2D 图像放入半球中

    我正在尝试将 2D 图像放入 3D 半球中 我有一张尺寸为 128x128 的图像 我生成我的半球 x y z sphere 127 x x 64 end y y 64 end z z 64 end Attempt warp x y z I
  • Django 查询自然排序

    假设我有这个 Django 模型 class Question models Model question code models CharField max length 10 我的数据库中有 15000 个问题 我想按以下方式排序问题代
  • 将位转换为整数

    我收到一个包含字节数组的数据包 我必须从中获取一些整数值 这是文档的一部分 有人能帮助我吗 这是一个 4 字节数组 年从 1990 到 2052 6 位 月从 1 到 12 4 位 日从 1 到 31 5 位 小时从 0 到 23 5 位
  • FlannBasedMatcher 返回不同的结果

    使用FlannBasedMatcher在 OpenCV 中 我使用相同的参数调用匹配器得到不同的结果 谁能建议我做错了什么 下面的代码显示了我遇到的问题的一个最小示例 它简化了我如何使用FlannBasedMatcher 这不是真正的代码
  • Java 中的访问器方法

    所以我对 setter 和 getter 方法以及它们是否有用有疑问 假设我只编写了一个非常基本的程序 如下所示 public class Account String name String address double balance
  • 具有不同返回类型和参数数量的 Func 委托列表

    我有一个类需要在构造函数中传递不同数量的 Func 委托 这些委托中的每一个都将指向不同的函数 每个函数都有不同的返回类型 并且具有不同数量的参数 双精度类型 然后将相应地调用每个函数 问题 1 现在 为了让使用此类的人更容易 我正在考虑允
  • 如何从 xml 节点查询值?

    我有一个包含 XML 列的表 CREATE TABLE Batches BatchID int RawXml xml 该 xml 包含以下项目
  • 调用未定义的方法 Goutte\Client::setClient()

    我被这个错误困住了 但客户端已定义 我的代码是这样的 use Goutte Client use Illuminate Http Request use GuzzleHttp Client as GuzzleClient class Web
  • 锁屏时如何获取音量键事件?

    Override public boolean dispatchKeyEvent KeyEvent event int action event getAction int keyCode event getKeyCode switch k
  • 协议中的 Swift 协议属性 - 候选者具有不匹配的类型

    我有一个协议 ProtocolA 其中包含符合第二个协议 ProtocolB 的单个属性 public protocol ProtocolA var prop ProtocolB get public protocol ProtocolB