# Swift 变量，常量和字面值

> 原文： [https://www.programiz.com/swift-programming/variables-constants-literals](https://www.programiz.com/swift-programming/variables-constants-literals)

#### 在本文中，您将了解 Swift 编程中的变量，常量，字面值及其用例。

## 什么是变量？

在编程中，变量用于将数据存储在内存中，可在整个程序中使用。 必须给每个变量一个唯一的名称，称为*标识符*。 将变量视为保存信息的容器很有帮助，以后可以更改这些信息。

从技术上讲，您可以将变量视为用于在其中存储一些书的书包，以后可以将这些书替换为其他书。

* * *

### 如何在 Swift 中声明变量？

在 Swift 中，我们使用`var`关键字来声明变量。

**示例**：

```swift
var siteName:String
print(siteName)

```

我们已经声明了`String`类型的名为`siteName`的变量，这意味着它只能容纳字符串值。 访问 [Swift Strings](/swift-programming/characters-strings "Swift Strings and characters") 了解有关字符串的更多信息。

如果您尝试在游乐场中运行以上代码，则会给我们带来编译时错误（在初始化之前使用了变量），因为它不存储/包含任何值。

* * *

### 如何在 Swift 中为变量赋值？

您可以使用[赋值运算符](/swift-programming/operators#assignment "Swift Assignment Operators")（=）在变量中赋值。

#### 示例 1：声明并将值分配给变量

```swift
var siteName:String
siteName = "Apple.com"
print(siteName)
```

要么

您还可以将值立即分配为

```swift
var siteName:String = "Apple.com"
print(siteName)
```

运行该程序时，输出为：

```swift
Apple.com
```

变量`siteName`现在包含值`"Apple.com"`。

* * *

由于 Swift 是[类型的推断语言](https://en.wikipedia.org/wiki/Type_inference "Swift type inference")，因此它可以自动推断（知道）“ Apple.com”是`String`并将`siteName`声明为[ `String`。 因此，您甚至可以将声明中的`(:String)`类型删除为：

#### 示例 2：在 Swift 中类型推断的变量

```swift
var siteName = "Apple.com"
print(siteName)
```

运行该程序时，输出为：

```swift
Apple.com
```

* * *

由于`siteName`是变量，因此您也可以通过简单地使用赋值运算符但不使用`var`关键字来更改其值，例如：

#### 示例 3：更改变量的值

```swift
var siteName = "Apple.com" 

// Assigning a new value to siteName
siteName = "Programiz.com"
print(siteName) 
```

运行该程序时，输出为：

```swift
Programiz.com
```

* * *

## 什么是常数？

常量是变量的一种特殊类型，其值不能更改。 将常量视为保存了以后无法更改的信息的容器是有帮助的。

从技术上讲，您可以将常量视为存放某些书的书包，而将这些书放在书包中后就无法替换。

* * *

### 如何在 Swift 中声明常量？

在 Swift 中，我们使用`let`关键字声明一个变量。

**Example:**

```swift
let siteName:String
print(siteName)
```

我们已经声明了一个类型为`String`的名为`siteName`的常量。

如果您尝试运行以上代码，则会给我们带来编译时错误（在初始化之前使用常量），因为它不包含/保留任何值。

* * *

### 如何在 Swift 中为常量分配值？

您可以使用赋值运算符（=）在与变量相同的**常量**中分配值。

#### 示例 4：声明并将值分配给常量

```swift
let siteName:String
siteName = "Apple.com"
print(siteName) 
```

OR

You can also assign the value inline as

```swift
let siteName:String = "Apple.com"
```

运行该程序时，输出为：

```swift
Apple.com
```

现在，常量`siteName`包含/持有值`"Apple.com"`。

* * *

与变量一样，可以从声明中删除类型（`:String`），如下所示：

#### 示例 5：在 Swift 中类型推断的常量

```swift
let siteName = "Apple.com"
print(siteName) 
```

运行该程序时，输出为：

```swift
Apple.com
```

* * *

但是与变量不同，您不能更改常量的值。 所以，你不能做

#### 示例 6：更改常量的值（不允许）

```swift
let siteName = "Apple.com"
siteName = "Programiz.com" //compile time error
print(siteName) 
```

上面的语句给我们带来了一个错误，因为正如我们所说的，一旦存储了数据，常量的值就无法更改。 这是变量和常量之间的关键区别。

* * *

## 什么是字面值？

字面值是直接出现在源代码中的值。 它可以是数字，字符或字符串等。例如：`"Hello, World"`，12、23.0，`"C"`是字面值的简单示例。 字面值常用于初始化变量或常量（将值分配给它们）。

**例如**：

```swift
let siteName = "Apple.com"
```

在上面的表达式中，`siteName`是变量，`"Apple.com"`是字面值。

* * *

### Swift 中字面值的类型

#### 整数字面值

它表示十进制，二进制，八进制或十六进制值。 它有四种类型。

*   二进制字面值
    *   代表二进制值。
    *   以`0b`开头。
*   八进制字面量
    *   代表八进制值。
    *   以`0o`开头。
*   十六进制字面值
    *   代表十六进制值。
    *   以`0x`开头。
*   小数字面值
    *   代表十进制值。
    *   一无所有。 您在整数字面值中声明的所有内容均为十进制类型。

**示例 7：如何在 Swift 中使用整数字面值？**

```swift
let binaryNumber = 0b11111111
print(binaryNumber)
print(1231) 
```

运行该程序时，输出为：

```swift
255
1231
```

在上面的程序中，有两个整数字面值`0b11111111`（二进制字面值）和`1231`（十进制字面值）。`11111111`的十进制值为 **255** ，因此`print(binaryNumber)`语句在屏幕上输出 255。

同样，`print(1231)`在控制台中输出十进制值 **255** 。

* * *

#### 字符串&字符字面值

字符串字面值是由双引号引起来的字符序列，而字符字面值是由双引号引起来的单个字符。

**示例 8：如何在 Swift 中使用字符串和字符字面值？**

```swift
let someCharacter:Character = "C"
let someString:String = "Swift is awesome" 
```

在上面的程序中，`"C"`是字符字面值，`"Swift is awesome"`是字符串字面值。

* * *

#### 浮点字面值

它用于初始化数据类型为`float`和`double`的变量。 它可以有两种类型：

**十进制**：

它可以具有可选的指数，由大写或小写`e`表示。 对于指数为`exp`的十进制数字，将基数乘以`10^exp`：

**示例 9：如何在 Swift 中使用十进制字面值？**

```swift
let someFloat = 12.23
let someAnotherFloat = 3.14e2 
print(someFloat)
print(someAnotherFloat) 
```

运行该程序时，输出为：

```swift
12.23
314.0
```

在上面的程序中，`12.23`和`3.14e2`是浮点字面值。`3.14e2`以指数表示，并且等效于 **3.14 * 10 <sup>2</sup>** 。

**十六进制**：

十六进制浮点数必须具有由大写或小写`p`表示的指数。对于具有`exp`指数的十六进制数，基数乘以`2^exp`：

**示例 10：如何在 Swift 中使用十六进制字面值？**

```swift
let someFloat = 0xFp10 
let someAnotherFloat = 0xFp-12
print(someFloat)
print(someAnotherFloat) 
```

运行该程序时，输出为：

```swift
15360.0
0.003662109375 
```

在上面的程序中，`0xFp10`和`0xFp-12`是浮点字面值。`0xFp10`用指数表示，等于`15 * 210`（`F`表示为十进制的 15）。 因此，`print(someFloat)`在屏幕上输出 15360.0。

同样，`0xFp-12`等于`15 * 2^-12`。 因此，`print(someAnotherFloat)`在屏幕上输出 0.003662109375。

* * *

#### 布尔字面值

快速有两个布尔字面值。 它们是`true`和`false.`。

**示例 11：如何在 Swift 中使用布尔字面值？**

```swift
let result:Bool = false
```

在上面的程序中，`false`是布尔常量，它分配给常量`result`。

* * *

## 变量和常量的规则和最佳做法

1.  选择一个有意义的名称。 例如，变量`name`比变量`n`更有意义。
2.  使用`camelCase`表示法声明变量或常量。 驼峰表示法以小写字母开头。 例如：

    ```swift
    var studentName
    let studentAge
    let address

    ```

3.  您也可以定义变量和常量而无需对其进行标记。 不使用名称标记意味着您不会在程序中使用它。 在许多情况下，您想创建一个未使用的变量。 在这种情况下，您可以将 _ 占位符用作：

    ```swift
    var _ = "Apple.com"//string initialized but not stored in a variable
    let _ = "Apple.com"
    ```

    甚至是有效的

    ```swift
    _ = "Apple.com"
    ```

4.  如果只需要设置一次值，而无需在程序中再次更改值，则使用常量。 但是，如果以后需要更改它，请使用变量。
5.  常量和变量名称不能包含空格字符，数学符号，箭头，专用（或无效）的 Unicode 代码点或线条和框形图字符。 它们也不能以数字开头，尽管数字可能包含在名称中的其他位置。

    例如：

    ```swift
    var 12 = "Apple.com" //gives a compile error: expected pattern
    var @hello = “Hello” //gives a compile error: expected pattern

    ```