💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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 ```