- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
关联类型的值可以是协议(protocol)吗?
protocol A {
var name: String {get set}
}
protocol B: A {}
protocol C {
associatedtype T: B
var t : T {get set}
}
class D : C {
var t : B
init(t : B) {
self.t = t
}
}
class E : B {
var name: String = ""
}
class F : B {
var name: String = "ff"
}
在类 D 中,如果 t 的类型是 E 或 F,则代码可以编译。但是如果 t 的类型是 B(这是一个协议(protocol)),编译失败说明:
Type 'D' does not conform to protocol 'C'
如何让关联类型保存协议(protocol)值?有任何关于失败原因的指示吗?
更新问题
删除关联类型的绑定(bind)并仅使用 T 将无济于事。我的协议(protocol)也有我想访问的方法。例如:
protocol A {
func sayHello()
}
protocol B : A {
var name: String {get set}
}
extension B {
func sayHello() {
print("Hello")
}
}
protocol C {
associatedtype T
var t: T {get set}
}
class D : C {
typealias T = E
var t: T
init(t : T) {
self.t = t
}
}
class E : B {
var name: String = ""
}
class F : B {
var name: String = "ff"
}
class G<S: C> {
var a: S
init(a: S) {
self.a = a
}
func notWorking() {
a.t.sayHello()
}
}
在上面的例子中,我无法访问 sayHello 方法。
我一直在努力寻找在另一个关联类型中使用泛型和关联类型来解决上述问题的解决方案 案例 我想要一个ObjectRequestType,它里面有一个关联类型ObjectResponseType。 proto
这个问题在这里已经有了答案: Unable to use protocol as associatedtype in another protocol in Swift (2 个答案) Protoc
我一直在为这个问题苦苦思索 我正在尝试在 Swift 上创建一个绑定(bind)结构,以一种简单的方式绑定(bind) viewModel 和 Controller 。所以我创建了一个协议(proto
我正在尝试为我的 tableviewcells 设计一个面向协议(protocol)的 MVVM。我有很多。 我的 viewModel protocol PlainTableViewCellModel
这个问题在这里已经有了答案: Unable to use protocol as associatedtype in another protocol in Swift (2 个答案) 关闭 4 年
假设我有一个协议(protocol): protocol Router { associatedtype Answer typealias AnswerCallback = (Answ
在 swift 协议(protocol)中使用 generic with function 或使用 associatedType 有什么区别? protocol Repository { as
我来自 Java,我在学习模式方面没有什么困难。 我有第一个协议(protocol) protocol Interval { } 第二个: protocol Event { associate
我在使用关联类型作为协议(protocol)时遇到问题: protocol Searchable{ func matches(text: String) -> Bool } protoc
我有一个非常具体的问题,我无法通过 SO 上的给定答案解决这个问题。为了简化这个问题,我删除了所有不需要的东西。此代码仅显示理解问题所需的一切: 所以我有一个看起来像这样的类: class DataS
在设计 API 时,我在每个角落都会遇到这个问题: Protocol can only be used as a generic constraint because it has Self or a
所以这里我有这个协议(protocol) public protocol UseCase { associatedtype ResponseType associatedtype Pa
我正在使用一个库,它定义了两个协议(protocol),A 和 B,每个协议(protocol)都有它的 associatedtype T,像这样: protocol A { associat
这个有效: protocol Inconceivable { associatedtype AbstractType func say(it: AbstractType) } clas
我有一个协议(protocol) RequestType,它有如下所示的 associatedType 模型。 public protocol RequestType: class { ass
我正在尝试使用 MVVM 向 iOS 应用程序添加一些基类,以使其更容易并强制执行公共(public)类关系。 遗憾的是,我遇到了以下问题: error: MyPlayground.playgroun
这个问题在这里已经有了答案: Protocol doesn't conform to itself? (3 个答案) 关闭 3 年前。 我有以下代码: protocol User { var
我有一个小问题,我找不到一种优雅的方法来使用具有关联类型的闭包作为协议(protocol)中的 Void。 假设我有以下协议(protocol): protocol MyProtocol { as
当我在 Playground xcode 9.2 上运行时,苹果文档代码中出现上述错误 https://developer.apple.com/library/content/documentatio
我是一名优秀的程序员,十分优秀!