Swift 整数、字符串等被视为';原语';斯威夫特?

Swift 整数、字符串等被视为';原语';斯威夫特?,swift,Swift,表示使用swift中的结构实现的数字、字符和字符串的类型 摘自: 在其他应用程序中通常被视为基本或基本的数据类型 表示数字、字符和字符的类型等语言 字符串实际上是在Swift中定义和实现的命名类型 使用结构的标准库 这是否意味着: Int Float String // etc 。。。是否不被视为基本类型?与Ruby一样,Swift没有基本类型 每个示例的Int实现为struct,并符合以下协议: 按位操作类型 CVarArgType 可比 CustomStringConvertible 相等

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

摘自:

在其他应用程序中通常被视为基本或基本的数据类型 表示数字、字符和字符的类型等语言 字符串实际上是在Swift中定义和实现的命名类型 使用结构的标准库

这是否意味着:

Int
Float
String
// etc

。。。是否不被视为基本类型?

与Ruby一样,Swift没有基本类型

每个示例的Int实现为
struct
,并符合以下协议:

按位操作类型
CVarArgType
可比
CustomStringConvertible
相等的
可散列
镜像路径类型
RandomAccessIndexType
SignedIntegerType
SignedNumberType


您可以检查Bool.swift的源代码,其中
Bool
是。

swift没有基元类型

在所有编程语言中,我们都有基本类型,这些类型是语言的一部分。在swift中,我们可以通过使用结构创建的swift标准库使用这些类型。其中包括数字、字符和字符串的类型


Swift中没有原语


然而,“值类型”和“引用类型”之间有区别。它不适合C++和java的使用。p> 不,它们不是其他语言定义的原语。但它们的行为就像原语一样,因为它们是通过值传递的。这是因为它们是由结构在内部实现的。考虑:

import Foundation

struct ByValueType {
    var x: Int = 0;
}

class ByReferenceType {
    var x: Int = 0;
}

var str: String = "no value";
var byRef: ByReferenceType = ByReferenceType();
var byVal: ByValueType = ByValueType();

func foo(var type: ByValueType) {
    type.x = 10;
}
func foo(var type: ByReferenceType) {
    type.x = 10;
}

func foo(var type: String) {
    type = "foo was here";
}

foo(byRef);
foo(byVal);
foo(str);

print(byRef.x);
print(byVal.x);
print(str);
输出是

10
0
no value
是和否

正如其他答案所指出的,在Swift中,在其他语言中被认为是“原语”的东西与标准库中的其他结构类型或您可以自己创建的值类型在语言级别上没有区别。例如,它不像Java,在Java中,
int
Integer
之间有很大的区别,并且不可能创建自己的类型,这些类型在语义上与前者类似。在Swift中,所有类型都是“非原始”或“用户级”:定义语法和语义的语言功能,例如,
Int
,与定义
CGRect
UIScrollView
或您自己的类型的语言功能没有什么不同

然而,仍然有区别。CPU具有用于添加整数、乘浮点、甚至向量叉积等任务的本机指令,但不包括插入矩形或搜索列表等任务。当人们将一种语言的某些类型命名为“原始”类型时,他们谈论的一件事是,编译器为这些类型提供了底层CPU体系结构的挂钩,因此您使用这些类型所做的事情直接映射到基本CPU指令。(也就是说,像“添加两个整数”这样的操作不会在对象查找和函数调用中陷入困境。)

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

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


只是想再多谈一谈这个话题

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

在其他语言中,字符串是“原语”的意思通常与C或Java中的意思类似:编译器有一种特殊情况,即在引号中加上某些内容会导致某些数据被内置到程序二进制文件中,而在代码中,您编写的代码中有一个指向该数据的指针,可能包装在某种对象接口中,以便您可以使用它进行有用的文本处理。(也就是说,一个字符串文字。)也许编译器还有一些特殊的情况,这样您就可以为一些文本处理过程提供方便的快捷方式,比如用于连接的
+


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

它们是部分原语

Swift不像其他语言(Java)那样公开原语。但Int、Int16、Float和Double是使用类似于派生原语数据类型(结构)的结构定义的,而不是对象指针

支持基本特征的Swift文档:

1.它们有散列扩展名,比如

公理:
x==y
意味着
x.hashValue==y.hashValue
。 hashValue是当前指定的值

2.大多数init方法用于类型转换和溢出检查(请记住swift是类型安全的)

三,。请参阅下面的代码Int,默认值为0,可选类型。NSNumber使用可选类型变量打印nil

 var myInteger:Int? = Int.init()
 print(myInteger) //Optional(0)
 var myNumber:NSNumber? = NSNumber.init()
 print(myNumber) //nil
Swift文档不支持原始特征:

  • 根据文档,有两种类型:命名类型和复合类型。没有基本类型的概念
  • Int支持扩展 扩展名Int:Hashable{}
  • 所有这些类型都可以通过Swift标准库获得,而不象标准关键字

  • 但是,如果在标准库中实现
    Int
    ,它无论如何都必须依赖于一些“原语”。那些原语是什么?我
     var myInteger:Int? = Int.init()
     print(myInteger) //Optional(0)
     var myNumber:NSNumber? = NSNumber.init()
     print(myNumber) //nil