Swift:返回运行时随机不透明类型会产生错误
Posted
技术标签:
【中文标题】Swift:返回运行时随机不透明类型会产生错误【英文标题】:Swift: returning a runtime random opaque type generates an error 【发布时间】:2021-06-24 15:34:42 【问题描述】:我现在正在学习 opaque 类型,仍然有点困惑。我尝试了以下方法:
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'
所以,据我所知,就像泛型一样,编译器需要能够在编译时决定函数的具体返回类型是什么。
我说的对吗?如果我是,这不是关于混淆的消息,因为两个结构都实现了Animal
?如果我错了,这个错误信息是什么意思?
非常感谢
编辑:我试图理解,而不是让它发挥作用:)
【问题讨论】:
***.com/questions/56433665/… 【参考方案1】:考虑一下:表达式值的类型是什么?猫狗() 它不是动物。对于三元组,您需要一种类型,但您有一只猫或一只狗。类型推断无法确定您可以将这两种不同的类型擦除回某个常见类型,即使可以这样做
【讨论】:
但如果我删除some
它会编译。是因为在这种情况下 swift 返回一个存在容器而不是具体类型吗?
@Yotam 阅读上面评论中链接的问题
是的,如果你返回一个 Animal ,这意味着它可以推断动物的三元表达式。两件事可以一样,三元是快乐的。但对于某些动物而言,情况并非如此,因为这意味着您要归还的是一只真正的猫,或者说是一只真正的狗。调用者可以把它当作某种动物,但那是下游。有些动物不是类型,所以不能统一这两种三元类型。
@JoakimDanielson 我做了,不够清楚。无论如何,我想我明白了。谢谢以上是关于Swift:返回运行时随机不透明类型会产生错误的主要内容,如果未能解决你的问题,请参考以下文章
SaveAs 产生不兼容的文件类型和扩展名错误(运行时错误 6294)