- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个协议(protocol) (ProtocolA),其中包含符合第二个协议(protocol) (ProtocolB) 的单个属性。
public protocol ProtocolA {
var prop: ProtocolB? { get }
}
public protocol ProtocolB {
}
我正在尝试声明两个将实现这些的类:
private class ClassA : ProtocolA {
var prop: ClassB?
}
private class ClassB : ProtocolB {
}
但是我得到一个错误:
Type 'ClassA' does not conform to protocol 'ProtocolA'
Protocol requires property 'prop' with type 'ProtocolB?'
Candidate has non-matching type 'ClassB?'
这很烦人,因为 ClassB 符合 ProtocolB。
在过去,我可能只是将属性声明为:
@property (nonatomic) ClassB <ProtocolB> *prop;
但似乎我可以快速解决这个问题的唯一方法是添加一个像这样的ivar:
private class ClassA : ProtocolA {
var _prop: ClassB?
var prop: ProtocolB? { return _prop }
}
有没有办法解决这个问题?
最佳答案
您需要声明一个符合其他协议(protocol)的类型的typealias
。你这样做的方式是 prop
必须完全是 ProtocolB
类型,但你实际上并不想要那个,你想要一个符合它的类型。
protocol ProtocolA {
typealias Prop : ProtocolB
var prop: Prop? { get }
}
protocol ProtocolB {}
class ClassA : ProtocolA {
var prop: ClassB?
}
class ClassB : ProtocolB {}
关于协议(protocol)中的 Swift 协议(protocol)属性 - 候选人具有不匹配的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355689/
pimpl(也称为:编译器防火墙)惯用语用于缩短编译时间,但代价是可读性和一点运行时性能。目前一个项目需要很长时间才能编译,如何衡量最好的 pimpl 候选人? 我有使用 pimpl 的经验,可以将项
[下面用粗体表示的问题] 我在运行 OS Ubuntu 14.04 的防火墙后面的数据中心中设置了 Kurento Media Server 5.1.3。它有两个网卡: 222.222.222.222
我正在使用 Kurento Utils用于与 Kurento 媒体服务器(ver 5.x)的 WebRTC 连接 在初始化期间的 kurento-utils-js 库中,简化代码如下所示: if (!
在 unite.vim 中搜索后,你打开一个候选人。有没有一种简单的方法可以跳转到下一个而无需再次运行搜索命令?类似的插件( ack.vim , git-grep )使用快速修复窗口,因此您可以输入
为了我自己,我正在逐步测试 WebRTC 程序。 我为无服务器 WebRTC 编写了一些测试站点。 http://webrtcdevelop.appspot.com/ 其实使用的是google的STU
我有一个基本的 webRTC 应用程序,它支持两个同行之间的视频/音频通信和文件共享,当我在 Mozilla Firefox 上打开它时,该应用程序按预期运行,但当我在 Google Chrome 上
我是一名优秀的程序员,十分优秀!