swift中泛型和any类型

author author     2023-04-05     207

关键词:

参考技术A 除了泛型,Swift 还支持 Any 类型,它能代表任何类型的值。从表面上看,这好像和泛型极其相似。Any 类型和泛型两者都能用于定义接受两个不同类型参数的函数。然而,理解两者之间的区别至关重要:泛型可以用于定义灵活的函数,类型检查仍然由编译器负责;而 Any 类型则可以避开 Swift 的类型系统 (所以应该尽可能避免使用)。

让我们考虑一个最简单的例子,构想一个函数,除了返回它的参数,其它什么也不做。如果使用泛型,我们可能写为下面这样:

而使用 Any 类型,则可能写为这样:

“noOp 和 noOpAny 两者都将接受任意参数。关键的区别在于我们所知道的返回值。在 noOp 的定义中,我们可以清楚地看到返回值和输入值完全一样。而 noOpAny 的例子则不太一样,返回值是任意类型 — 甚至可以是和原来的输入值不同的类型。我们可以给出一个 noOpAny 的错误定义,如下所示:

使用 Any 类型可以避开 Swift 的类型系统。然而,尝试将使用泛型定义的 noOp 函数返回值设为 0 将会导致类型错误。此外,任何调用 noOpAny 的函数都不知道返回值会被转换为何种类型。而结果就是可能导致各种各样的运行时错误。”

swift-泛型(代码片段)

泛型和Any的区别?从表面上看两者没有区别。但是,泛型可以用于定义灵活的函数,类型检查仍然由编译器负责。而Any可以逃避开我们swift的类型系统。因此,可以的话尽量不要使用Any。​​​​​​​1.泛型代码... 查看详情

c#语言中泛型和委托的关系是啥,func<int>是泛型还是委托?

C#语言中泛型和委托的关系是什么,Func是泛型还是委托?参考技术AFunc既是泛型也是委托。表示一个没有参数,有int返回值的函数。 查看详情

swift-泛型(代码片段)

泛型和Any的区别?从表面上看两者没有区别。但是,泛型可以用于定义灵活的函数,类型检查仍然由编译器负责。而Any可以逃避开我们swift的类型系统。因此,可以的话尽量不要使用Any。​​​​​​​1.泛型代码... 查看详情

swift使用值类型泛型和内存指针进行队列(代码片段)

查看详情

0513泛型和学生信息(代码片段)

...于代码的复用性,可移植性,可操作性。1.2泛型格式Java中泛型规定: <自定义无意义英文大写单字母占位符> 一般常用: <T>Type <E>Element 查看详情

swift开发第九篇——any和anyobject&typealias和泛型接口

...为两部分:一、Swift中的Any和AnyObject二、Swift中的typealias和泛型接口  一、Swift中的Any和AnyObject  在Swift中,AnyObject可以代表任何class类型的实例,Any可以表示任意类型,包括方法(func)类型,相当于OC中的id。因为id可以为空,... 查看详情

0513泛型和学生信息(代码片段)

...于代码的复用性,可移植性,可操作性。1.2泛型格式Java中泛型规定: <自定义无意义英文大写单字母占位符> 一般常用: <T>Type <E>Element <K>Key <V>Value泛型可以约束 方法 类 接口1.3【补充知识点包装类】Java... 查看详情

Swift 泛型和协议扩展

】Swift泛型和协议扩展【英文标题】:SwiftGenericsandProtocolExtensions【发布时间】:2015-09-2019:57:01【问题描述】:我有一个协议Reusable,它有一个静态函数staticfuncreuseId()-&gt;String和一个定义函数默认实现的协议扩展。然后,我在UIT... 查看详情

Swift泛型和扩展需要锻炼[重复]

】Swift泛型和扩展需要锻炼[重复]【英文标题】:Swiftgenericsandextensionsneedtoworkout[duplicate]【发布时间】:2015-06-2512:02:16【问题描述】:我目前正在快速学习。在学习时,我被泛型所困扰。我正在解决一个简单的问题,即->返回数... 查看详情

Scala中泛型类型之间的比较

】Scala中泛型类型之间的比较【英文标题】:ComparisonsbetweengenerictypesinScala【发布时间】:2021-07-3110:31:48【问题描述】:考虑以下代码段-abstractclassVehiclevalname:StringcaseclassCar(name:String)extendsVehiclecaseclassTruck(name:String)extendsVehicleabstra 查看详情

java示例代码_确定Java中泛型字段的类型

java示例代码_确定Java中泛型字段的类型 查看详情

TypeScript 中泛型类型的子类型推断

】TypeScript中泛型类型的子类型推断【英文标题】:InferenceofSubtypesofGenericTypesinTypeScript【发布时间】:2018-01-1819:56:46【问题描述】:我想要一个函数,它接受一些对象并返回其x属性。该对象需要限制为泛型类型Type&lt;X&gt;,... 查看详情

java中泛型的理解

Java中的泛型,本质上来说,就是是参数化类型,就是说所操作的数据类型被指定为一个参数,而不是确定的某种类型。这种数据类型可以用在类、接口和方法创建中。即泛型类、泛型接口、泛型方法。这样说可能不够生动,来... 查看详情

如何确定 Java 中泛型字段的类型?

】如何确定Java中泛型字段的类型?【英文标题】:HowcanIdeterminethetypeofagenericfieldinJava?【发布时间】:2009-12-0817:00:07【问题描述】:我一直在尝试确定类中字段的类型。我已经看过所有的内省方法,但还没有完全弄清楚如何去做... 查看详情

Scala中泛型类型的模式匹配

】Scala中泛型类型的模式匹配【英文标题】:PatternmatchingongenerictypeinScala【发布时间】:2014-01-2214:10:49【问题描述】:我有如下所示的scala函数:现在,取决于T的类型(在我的情况下,它可以是Double、Boolean和LocalDate),我需要在o... 查看详情

对泛型编程中泛型类型的一些理解(代码片段)

如果需要在泛型类中获取泛型类型的Class对象,可以使用以下的方法:/***通过反射,获得定义Class时声明的父类的泛型参数的类型.如无法找到,返回Object.class.**@paramclazz*clazzTheclasstointrospect*@paramindex*theIndexofthegenericddeclaration,... 查看详情

c#中泛型类型的默认值[重复]

】c#中泛型类型的默认值[重复]【英文标题】:defaultvalueforgenerictypeinc#[duplicate]【发布时间】:2010-09-2701:36:53【问题描述】:Dictionary.TryGetValue的文档说:当该方法返回时,[value参数]包含与指定键关联的值,如果找到该键;否则,v... 查看详情

将具有类型参数的类作为Java中泛型方法的类型参数传递

】将具有类型参数的类作为Java中泛型方法的类型参数传递【英文标题】:PassingaclasswithtypeparameterastypeparameterforgenericmethodinJava【发布时间】:2013-08-2717:14:32【问题描述】:问题总结:我想将带有类型参数的类(例如ArrayList&lt;So... 查看详情