- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 swift 协议(protocol)中使用 generic with function 或使用 associatedType 有什么区别?
protocol Repository {
associatedtype T
func add(data : T) -> Bool
}
和
protocol Repository {
func add<T>(data : T) -> Bool
}
最佳答案
定义的关联类型使符合强类型协议(protocol)的类。这提供了编译时错误处理。
另一方面,泛型使得符合协议(protocol)的类更加灵活。
例如:
protocol AssociatedRepository {
associatedtype T
func add(data : T) -> Bool
}
protocol GenericRepository {
func add<T>(data : T) -> Bool
}
class A: GenericRepository {
func add<T>(data : T) -> Bool {
return true
}
}
class B: AssociatedRepository {
typealias T = UIViewController
func add(data : T) -> Bool {
return true
}
}
class A
可以将任何类放入 add(data:)
函数中,因此您需要确保该函数处理所有情况。
A().add(data: UIView())
A().add(data: UIViewController())
两者都是有效的
但对于 B
类,当您尝试放置除 UIViewController
之外的任何内容时,您将遇到编译时错误
B().add(data: UIView()) // compile-time error here
B().add(data: UIViewController())
关于swift - 协议(protocol) associatedType 和 <>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041579/
我一直在努力寻找在另一个关联类型中使用泛型和关联类型来解决上述问题的解决方案 案例 我想要一个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
我是一名优秀的程序员,十分优秀!