在Swift中,我们操作的元素都有类型。
当我们使用这些类型时,我们可以添加&#39; !&#39; <#39; ?&#39;或者 nothing 来表达他们的可空性。
类型装饰者?装饰师?接线员?别的什么?
这是一种新型吗?它是装饰类型吗?类型变化?
swift编译器似乎将它们视为新类型,但我的问题不是实现或语言相关,因此我将其标记为语言不可知。
编辑:我正在寻找与语言无关的名称。我理解pranjalsatija的评论选项定义为compound type
。
但是,这是一个语言实现细节。
我可以将我的问题改为:
在将其用作类型定义时,您如何称呼具有特殊含义的字符,以及如何调用派生类型。
这个术语应该适用于红宝石中的资本套管常数,因为概念是相似的。
答案 0 :(得分:7)
?
不是装饰器或运算符。它是Swift中硬编码的语法糖,允许您将Optional<Thing>
缩短为Thing?
。
?
并没有真正的名字(至少我从未听过Swift团队中的任何人使用过一个名字),在语言参考中它只被描述为“后缀?
” 。语言语法没有把它放在句法范畴中。
同样,[Thing]
是Array<Thing>
的简写,但在此上下文中没有方括号的名称。
将Option<Int>
描述为“派生自”Int
将误用“衍生”一词。如果您想将其描述为“Optional
专门用于Int
”,则可以。
事实上,您可能正在寻找与Swift允许您构建适用于任何类型Optional<T>
的类型(如Array<T>
或T
)的语言无关的术语不得不关心T
实际上是什么。在这种情况下,该术语可能是generics。
!
有点不同。应用于Thing!
中的类型名称时,它是ImplicitlyUnwrappedOptional<Thing>
的简写,与?
的方式相同。
!
类型的变量时, Thing?
相当于测试可选项的后缀运算符,如果它是nil
,则终止程序,如下所示:
postfix operator !<T>(value: T?) -> T {
if let unwrapped = value {
return unwrapped
}
else {
fatalError("unexpectedly found nil while unwrapping an Optional value")
}
}
所以在这种情况下,!
可以被描述为运算符。但不是在第一种情况下。
有关给定语言用于描述选项的术语,请参阅Option type维基百科页面。
答案 1 :(得分:0)
Swift中的Optionals在技术上是完全不同的类型,而不是相同类型的变体。但是,对于开发人员来说,他们似乎是变体,所以我们会这样对待它们。的?而且!我还没有真正拥有一套指定名称,至少不是我所知道的。从某种意义上说,你不应该将它们称为类型装饰器,因为选项本身就是新类型。那么回答你的问题,?而且!是类型名称的一部分,而不是其他任何东西。使用时创建的新类型?还是一个!就是这样。一种全新的类型。
答案 2 :(得分:0)
使用'?'创建的类型是一个可选的'!'是隐式解包的可选
我认为答案here可以帮助你,他们将两者都称为装饰