swift - Int、String 等在 Swift 中被认为是 'primitives' 吗?

标签 swift

表示数字、字符和字符串的类型使用 swift 中的结构实现。

摘自 official documentation :

Data types that are normally considered basic or primitive in other languages—such as types that represent numbers, characters, and strings—are actually named types, defined and implemented in the Swift standard library using structures.

这是否意味着以下内容:

Int
Float
String
// etc

...不被视为原语?

最佳答案

是和不是...

正如其他答案所指出的,在 Swift 中,在其他语言中被认为是“原始”的事物与标准库中的其他结构类型或值之间没有区别在语言级别您可以自己创建的类型。例如,它不像 Java,在 Java 中 intInteger 之间有很大的区别,并且不可能创建您自己的类型在语义上表现得像前者。在 Swift 中,所有类型都是“非原始的”或“用户级的”:定义语法和语义的语言特性,比如 Int 与定义 CGRect< 的语言特性没有区别UIScrollView 或您自己的类型。

不过,还是有区别的。 CPU 具有执行诸如整数加法、 float 乘法甚至向量叉积等任务的 native 指令,但不包括插入矩形或搜索列表等任务。人们在“原始地”命名某些语言的类型时谈论的一件事是,编译器为这些类型提供了底层 CPU 体系结构的 Hook ,因此您对这些类型所做的事情直接映射到基本 CPU指示。 (也就是说,像“添加两个整数”这样的操作不会陷入对象查找和函数调用的泥潭。)

Swift 仍然有这种区别——某些标准库类型如 IntFloat 是特殊的,因为它们映射到基本的 CPU 操作。 (在 Swift 中,编译器不提供任何其他方式来直接访问这些操作。)

与许多其他语言的不同之处在于,对于 Swift 而言,“原始”类型与其他类型之间的区别是标准库的实现细节,而不是语言的“特性”。


再多聊聊这个话题...

当人们在许多语言中谈论字符串是一种“原始”类型时,这个词的含义是不同的——字符串是一种比整数和 float 更远离 CPU 的抽象级别。

字符串在其他语言中是“原始的”通常意味着它在 C 或 Java 中的作用:编译器有一种特殊情况,将某些内容放在引号中会导致某些数据被内置到程序二进制文件中,并且在代码中的位置你写的是获取指向该数据的指针,可能包含在某种对象接口(interface)中,这样你就可以用它进行有用的文本处理。 (即字符串文字。)也许编译器也有特殊情况,因此您可以为其中一些文本处理过程提供方便的快捷方式,例如用于连接的 +

在 Swift 中,String 是“原始的”,因为它是标准库中所有与文本相关的函数使用的标准字符串类型。但是没有编译器魔法阻止您创建自己的字符串类型,这些字符串类型可以用文字创建或用运算符处理。因此,在 Swift 中,“原语”和用户类型之间的区别要小得多。

关于swift - Int、String 等在 Swift 中被认为是 'primitives' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822136/

相关文章:

ios - 覆盖 AVCaptureVideoPreviewLayer

ios - 缩小 UINavigationBar 大标题文本的大小

ios - 如何使用 Swift 删除注销按钮并永久存储 session FBSDK IOS

objective-c - 组合 Swift 和 Objective C 文件

swift - UIAlertAction 错误

swift - 错误是类型 'AuthDataResult' 的值没有成员 'uid'?

ios - Swift:dispatch_async is effect is inconsistent for animation

ios - 使用Swift将数据写入Firebase

swift - 带有 SF 符号的 HStack 图像未居中对齐

ios - Swift:无法打开枚举关联值