Swift:返回运行时随机不透明类型会产生错误

问题描述

我现在正在学习不透明类型,仍然有点混乱。我尝试了以下方法

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'?如果我错了,此错误消息是什么意思?

非常感谢

编辑:我试图理解,而不是让它起作用:)

解决方法

考虑一下:表达式值的类型是什么?猫狗() 它不是动物。对于三元,你需要一种类型,但你有一只猫或一只狗。类型推断不会弄清楚您可以将这两种不同的类型擦除回某个常见类型,即使可以这样做

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...