gpt4 book ai didi

swift - 协议(protocol) associatedType 和 <>

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:03 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com