31.1. 介绍

Swift 语言存在两种类型:命名型类型和复合型类型。命名型类型是指定义时可以给定名字的类型。命名型类型包括类、结构体、枚举和协议。比如,一个用户定义类 MyClass 的实例拥有类型 MyClass。除了用户定义的命名型类型,Swift 标准库也定义了很多常用的命名型类型,包括那些表示数组、字典和可选值的类型。

那些通常被其它语言认为是基本或原始的数据型类型,比如表示数字、字符和字符串的类型,实际上就是命名型类型,这些类型在 Swift 标准库中是使用结构体来定义和实现的。因为它们是命名型类型,因此你可以按照 第二十二章:扩展扩展声明 中讨论的那样,声明一个扩展来增加它们的行为以满足你程序的需求。

复合型类型是没有名字的类型,它由 Swift 本身定义。Swift 存在两种复合型类型:函数类型和元组类型。一个复合型类型可以包含命名型类型和其它复合型类型。例如,元组类型 (Int, (Int, Int)) 包含两个元素:第一个是命名型类型 Int,第二个是另一个复合型类型 (Int, Int)

你可以在命名型类型和复合型类型使用小括号。但是在类型旁加小括号没有任何作用。举个例子,(Int) 等同于 Int

本节讨论 Swift 语言本身定义的类型,并描述 Swift 中的类型推断行为。

type

类型语法

类型 → 函数类型

类型 → 数组类型

类型 → 字典类型

类型 → 类型标识

类型 → 元组类型

类型 → 可选类型

类型 → 隐式解析可选类型

类型 → 协议合成类型

类型 → 不透明类型

类型 → 元型类型

类型 → 自身类型

类型Any

类型 类型

类型注解

类型注解显式地指定一个变量或表达式的类型。类型注解从冒号 (:)开始, 以类型结尾,比如下面两个例子:

let someTuple: (Double, Double) = (3.14159, 2.71828)
func someFunction(a: Int) { /* ... */ }

在第一个例子中,表达式 someTuple 的类型被指定为 (Double, Double)。在第二个例子中,函数 someFunction 的形参 a 的类型被指定为 Int

类型注解可以在类型之前包含一个类型特性的可选列表。

类型注解语法

type-annotation:类型注解: 特性列表可选 输入输出参数可选 类型