问题描述
我现在正在学习不透明类型,仍然有点混乱。我尝试了以下方法:
DefaultClient
在 protocol Animal {
func introduce()
}
struct Dog: Animal {
func introduce() {
print("Dog")
}
}
struct Cat: Animal {
func introduce() {
print("Cat")
}
}
func random() -> some Animal {
let value = [true,false].randomElement()!
return value ? Cat() : Dog()
}
的返回行中,我收到以下错误
random
所以,据我所知,就像泛型一样,编译器需要能够在编译时决定函数的具体返回类型是什么。
我说得对吗?如果我是,这不是关于混淆的消息,因为两个结构都实现了 Result values in '? :' expression have mismatching types 'Cat' and 'Dog'
?如果我错了,此错误消息是什么意思?
非常感谢
编辑:我试图理解,而不是让它起作用:)
解决方法
考虑一下:表达式值的类型是什么?猫狗() 它不是动物。对于三元,你需要一种类型,但你有一只猫或一只狗。类型推断不会弄清楚您可以将这两种不同的类型擦除回某个常见类型,即使可以这样做