Ios 如果存在特定函数,则调用该函数,否则将使用协议中的默认值
我有以下情况:函数有一个协议版本,可能有一个实现该协议的特定结构。如果存在一个特定的,我想将其称为,否则称为默认值 如果类型是最具体的,则此选项有效。但是,如果我在某个地方(比如在集合上迭代),只授予协议一致性,那么检查特定函数是否存在的最佳方法是什么 在下面,我将检查泛型实现中的实例是否更特殊。但这有点像手工操作,因为我必须知道哪些结构(…代理)实现了这个功能 有更好的方法吗Ios 如果存在特定函数,则调用该函数,否则将使用协议中的默认值,ios,swift,Ios,Swift,我有以下情况:函数有一个协议版本,可能有一个实现该协议的特定结构。如果存在一个特定的,我想将其称为,否则称为默认值 如果类型是最具体的,则此选项有效。但是,如果我在某个地方(比如在集合上迭代),只授予协议一致性,那么检查特定函数是否存在的最佳方法是什么 在下面,我将检查泛型实现中的实例是否更特殊。但这有点像手工操作,因为我必须知道哪些结构(…代理)实现了这个功能 有更好的方法吗 import Cocoa protocol Agent { func doSomething() } ext
import Cocoa
protocol Agent {
func doSomething()
}
extension Agent {
func doSomething() {
if let specialAgent = self as? SpecialAgent {
specialAgent.doSomething()
return
} // same for fooAgent, barAgent, ...
print("extension implementation")
}
}
struct SpecialAgent: Agent {
func doSomething() {
print("specific implementation")
}
}
// this would be somewhere where we get all kinds of Agents and act on them
let agents: [Agent] = [SpecialAgent()]
for agent in agents {
agent.doSomething()
}
为什么doSomething()不是协议的一部分,这样符合代理的每个结构都有自己的实现呢?看来你现在想做什么了谢谢,我在转会中错过了,这里有什么问题?只要您将函数声明为协议要求(如您在edit中添加的那样),您的代码就应该已经完成了您希望它做的事情。为什么doSomething()不是协议的一部分,以便符合代理的每个结构都有自己的实现呢?看来你现在想做什么了谢谢,我在转会中错过了,这里有什么问题?只要将函数声明为协议要求(如您在编辑中添加的),您的代码就应该已经执行了您希望它执行的操作