# Swift 的字符和字符串

> 原文： [https://www.programiz.com/swift-programming/characters-strings](https://www.programiz.com/swift-programming/characters-strings)

#### 在本教程中，您将学习 Swift 中的字符和字符串用法。 您还将学习可以对字符串和字符执行的不同操作。

## 什么是字符？

字符是单个符号（字母，数字等）。 swift 中的字符为`Character`类型，并声明为：

```swift
let someCharacter:Character
```

* * *

### 如何在 Swift 中声明和分配字符？

您可以使用双引号`" "`分配与`String`相同的字符类型的值，但在引号`" "`内仅应包含**单字符**。

如果需要包含多个字符，则需要将其定义为`String`而不是`Character`。

#### 示例 1：声明和分配字符

```swift
let someCharacter:Character = "H"
let specialCharacter:Character = "@"
print(someCharacter)
print(specialCharacter)
```

运行该程序时，输出为：

```swift
H
@
```

* * *

#### 示例 2：分配多个字符（无效）

但是，如果您尝试在字符内分配两个符号为

```swift
/*
 This will give an error
 Changing the type to String will fix it.
*/
let failableCharacter:Character = "H@"
print(failableCharacter) 
```

当您尝试运行上面的代码时，您将收到以下错误消息：

```swift
Cannot convert value of type String to Character.
```

* * *

### 使用 Unicode 和转义序列创建字符

您也可以使用 [Unicode](https://en.wikipedia.org/wiki/Unicode "Unicode") 为表情符号创建特殊类型的字符。 您可以使用转义序列`\u{n}`创建 unicode（unicode 代码点，n 为十六进制）。

#### 示例 3：创建一个 unicode 字符

```swift
let heartShape:Character = "\u{2665}"
print(heartShape) 
```

运行该程序时，输出为：

```swift
♥
```

在上面的示例中，从代码`U+2665`创建了一个心形字符。 尽管`\u{2665}`包含在双引号中，但是编译器不会将其视为`String`，因为我们使用了[转义序列](https://en.wikipedia.org/wiki/Escape_sequences_in_C "Escape sequence") `\u{n}`。 包含在字面值中的转义序列并不代表自身。

* * *

## 什么是字符串？

字符串只是字符的集合。 Swift 中的字符串为`String`类型，并声明为：

```swift
let someString:String
```

* * *

### 如何在 Swift 中声明和分配字符串？

您可以使用[字符串字面值](/swift-programming/variables-constants-literals#string-character-literal "String literals in Swift")以`String`类型分配值。 字符串字面值是用双引号`" "`包围的字符的集合。

#### 示例 4：声明和分配字符串

```swift
let someString:String = "Hello, world!"
let someMessage = "I love Swift."
print(someString)
print(someMessage)
```

运行该程序时，输出为：

```swift
Hello, world!
I love Swift.
```

这里，`"Hello, world!"`和`"I love Swift."`都是用于分别创建字符串变量`someString`和`someMessage`的字符串字面值。

* * *

### 字符串操作

`String`中有一些内置的函数和属性来处理最常用的操作。 例如：要连接字符串，请将其更改为大写或大写。 让我们在下面探索一些常用的操作：

#### 字符串比较

您可以使用[比较运算符](/swift-programming/operators#comparison "Swift comparison operator") `(==)`来简单地检查两个字符串是否相等。 如果两个字符串相等，则运算符返回`true`，否则返回`false`。

**示例 5：Swift** 中的字符串比较

```swift
let someString = "Hello, world!"
let someMessage = "I love Swift."
let someAnotherMessage = "Hello, world!"
print(someString == someMessage)
print(someString == someAnotherMessage) 
```

运行该程序时，输出为：

```swift
false
true
```

* * *

#### 字符串连接

可以使用[加法运算符](/swift-programming/operators#arithmetic "Swift arithmetic operators") `(+)`或使用[复合赋值运算符](/swift-programming/operators#assignment "Swift 赋值运算符") `(+=)`将两个不同的字符串值相加。 您也可以使用`append`方法在字符串中附加一个字符/字符串。

**示例 6：Swift** 中的字符串连接

```swift
let helloStr = "Hello, "
let worldStr = "World"
var result = helloStr + worldStr
print(result)
result.append("!")
print(result) 
```

运行该程序时，输出为：

```swift
Hello, World
Hello, World!
```

在上述程序中，我们使用+运算符附加了`helloStr`和`worldStr`，从而创建了**字符串**结果。 因此，`print(result)`在屏幕上输出`Hello, World`。

您也可以使用`append`方法附加任何字符或字符串。`result.append("!")`在字符串的末尾附加一个`!`字符。 因此，`print(result)`输出`Hello, World!`。

**使用高级赋值运算符**的字符串连接

我们还可以使用高级赋值运算符（`+=`）附加字符串。

**示例 7：使用`+=`运算符**的字符串连接

```swift
var helloStr = "Hello, "
let worldStr = "World!"

helloStr +=  worldStr
print(helloStr) 
```

运行该程序时，输出为：

```swift
Hello, World!
```

注意在`helloStr`中使用`var`代替`let`。 如果使用`let`定义了`helloStr`一个常量，则以后不能使用`+=`运算符对其进行更改，最终会出现错误。 因此，您必须定义`helloStr`变量。

* * *

### 字符串插值

这是求值包含变量，常量等组成的字符串字面值的简单过程。假设您的球员姓名和得分存储在两个常量中，如下所示：

```swift
let playerName = "Jack"
let playerScore = 99
```

现在，您需要向玩家显示一条消息，`Congratulations !. Your highest score is 99.`。 在这里，您需要一种在单个字符串中使用常量值的方法。

可以使用以下字符串连接来实现：

```swift
let congratsMessage = "Congratulations " + playerName + "!. Your highest score is " + playerScore + "."
print(congratsMessage)
```

但是，您会看到这很快就会变得混乱。 您必须注意`Congratulations`，`is`后面的空格。 另外，如果必须使用两个以上的常量/变量，它将变得不可读。

有一种使用字符串插值显示消息的简便方法。 插值是在字符串字面值中包含变量或常量的值的过程。

应该插入字符串字面值中的变量或常量用一对括号`( )`包裹，并以反斜杠`(\)`作为前缀。

#### 示例 8：Swift 中的字符串插值

```swift
let playerName = "Jack"
let playerScore = 99
let congratsMessage = "Congratulations \(playerName)!. Your highest score is \(playerScore)."
print(congratsMessage) 
```

运行该程序时，输出为：

```swift
Congratulations Jack!. Your highest score is 99.
```

* * *

## 一些有用的`String`内置函数&变量：

### 1\. `isEmpty`

此函数确定字符串是否为空。 如果字符串为空，则返回`true`，否则返回`false`。

#### 示例 9：`isEmpty`

```swift
var emptyString = ""
print(emptyString.isEmpty) 
```

运行该程序时，输出为：

```swift
true
```

* * *

### 2.`capitalized`

此属性用于大写字符串中的每个单词。

#### 示例 10：`capitalized`

```swift
let someString = "hello, world!"
print(someString.capitalized) 
```

运行该程序时，输出为：

```swift
Hello, World!
```

* * *

### 3.大写和小写

大写函数将字符串转换为大写字母，小写函数将字符串转换为小写字母。

#### 示例 11：`uppercased()`和`lowercased()`

```swift
let someString = "Hello, World!"
print(someString.uppercased())
print(someString.lowercased()) 
```

运行该程序时，输出为：

```swift
HELLO, WORLD!
hello, world!
```

* * *

### 4.长度/`count`

此属性用于计算字符串中的字符总数。

#### 示例 12：`count`

```swift
let someString = "Hello, World!"
print(someString.count) 
```

运行该程序时，输出为：

```swift
13
```

* * *

### 5\. `hasPrefix`

此函数确定字符串是否以某些字符开头并返回布尔值。 如果字符串前缀与提供的值匹配，则返回`true`，否则返回`false`。

#### 示例 13：`hasPrefix()`

```swift
let someString = "Hello, World!"
print(someString.hasPrefix("Hell"))
print(someString.hasPrefix("hell")) 
```

运行该程序时，输出为：

```swift
true
false 
```

* * *

### 6\. `hasSuffix`

此函数确定字符串是否以某些字符结尾，并返回布尔值。 如果字符串后缀与提供的值匹配，则返回`true`，否则返回`false`。

#### 示例 14：`hasSuffix()`

```swift
print(someString.hasSuffix("rld!"))
print(someString.hasSuffix("Rld!")) 
```

运行该程序时，输出为：

```swift
true
false 
```