The Basics

Types


Swift 和 C++ 一样,都属于静态类型语言,要求你明确地声明某一个值(变量、常量、属性)的类型后xxxxx,并不再修改(JavaScript就是类型不安全的,即 dynamic typed

而 Swift 是一种类型安全的语言

这里不对,应该添加swift不支持implicit conversion,而C++支持,swift更佳安全,而C++更自由

Constants and Variables

在 C++ 中,常量是变量的一个属性,我们通过给变量添加修饰符 (Specifier) 来实现。因此在 C++ 中,常量是“不可修改的变量”,只具有读属性。在 C++ 中,你会这样声明一个变量或常量:

int varInt = 10; // This is a variable.
const int constInt = 10; // This is a constant.

在 Swift 中,一个值要么是常量要么是变量。变量和常量在语义上的关系是完全平等的,彼此独立,而不是一个是另一个的修饰。在 Swift 中,这样的声明方式更为常见:

var varInt = 10 // This is a variable.
let constInt = 10 // This is a constant.

这里缺省了值类型名,这是因为 Swift 支持类型推导,虽然在 C++11 后,你也可以使用 auto 关键字来缺省类型实现类型推导,但远没有 Swift 这类语言来得方便。

Constant Declaration at Runtime

由于 C++ 的常量 与 C++ 常量必须在声明时赋值不同,Swift 允许你在运行时赋值,但这时你得显式的给出常量的类型,而且你需要保证不对未初始化的常量进行访问。如:

var environment = "DEBUG"
let runtimeConstant: Int
// runtimeConstant not readable
if environment == "DEBUG" {
	runtimeConstant = 100
} else {
	runtimeConstant = 50
}
// Has been initialized, you can read runtimeConstant

如果你在初始化常量时赋值,Swift 还会在编译时对类型进行检查。比如:

let myConstant = 20
myConstant = 10 // Error!!

Type Annotations

虽然你可以在初始化时缺省类型,但是如果你只是想先声明一个变量,你就需要明确值类型(即 type annotation)。值得注意的是,不同与 C++ 中常见的前置类型,在 Swift 中,无论是值类型还是函数的返回值类型,它们都是后置类型,如:

Type Naming

Data Types in Swift

Integers

Arrays

Sets

Dictionaries

Printing Variables and Constants


Semicolons