如何在Swift中将字符串拆分为数组:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么字符串拆分是每个Swift开发者必须掌握的基础技能

\n\n

想象一下这样的场景:您正在解析CSV文件、处理来自文本字段的用户输入,或者解析类似JSON的字符串。您会怎么做?没错——将字符串拆分为数组。在Stack Overflow上,"Split a String into an array in Swift?"这个问题获得了超过20,000次浏览,成为初学者iOS开发者中最热门的问题之一。为什么?因为没有这项技能,您就无法在Swift中编写任何严肃的项目。

\n\n

在本文中,我们将探讨在Swift中将字符串拆分为数组的所有可能方法:从经典的components(separatedBy:)到现代的split(separator:),以及使用正则表达式的巧妙技巧。您将了解如何根据任务选择合适的方法,并获得可以直接插入到Xcode项目中的现成代码示例。

\n\n

1. 经典方法:components(separatedBy:)

\n\n

这个方法源自Objective-C,至今仍被广泛使用。它简单、直观,并且像瑞士钟表一样可靠。components(separatedBy:)返回一个由指定分隔符分割的字符串数组[String]。

\n\n
import Foundation\n\nlet text = "苹果,香蕉,橙子,猕猴桃"\nlet fruits = text.components(separatedBy: ",")\nprint(fruits) // ["苹果", "香蕉", "橙子", "猕猴桃"]
\n\n

components(separatedBy:)方法的重要细节:

\n
    \n
  • 分隔符是字符串。您可以传递任何String,甚至包含多个字符:"::"、" - "。
  • \n
  • 保留空元素。如果分隔符之间没有内容,数组中会出现一个空字符串。
  • \n
  • 需要import Foundation。没有导入,该方法不可用。
  • \n
\n\n
let data = "a,,b,c"\nlet parts = data.components(separatedBy: ",")\nprint(parts) // ["a", "", "b", "c"]
\n\n

当您需要简单快速地在Swift中将字符串拆分为数组且无需额外操作时,此方法非常理想。但请记住:它不会自动删除空子字符串。

\n\n

2. 现代方法:split(separator:maxSplits:omittingEmptySubsequences:)

\n\n

从Swift 2.0开始,我们有了原生方法split()。它更灵活,也更符合Swift的风格。与components不同,split返回的是Substring数组,而不是String数组。这是为了优化性能——子字符串引用原始字符串的内存。

\n\n
let sentence = "敏捷的棕色狐狸跳过了懒狗"\nlet words = sentence.split(separator: " ")\nprint(words) // ["敏捷的", "棕色", "狐狸", "跳过了", "懒狗"]
\n\n

split方法的参数:

\n
    \n
  • separator — 分隔符字符(Character)。
  • \n
  • maxSplits — 最大分割次数(默认为Int.max)。
  • \n
  • omittingEmptySubsequences — 是否删除空子字符串(默认为true)。
  • \n
\n\n
let csvLine = "1,2,,4,5"\nlet withEmpties = csvLine.split(separator: ",", omittingEmptySubsequences: false)\nprint(withEmpties) // ["1", "2", "", "4", "5"]\n\nlet withoutEmpties = csvLine.split(separator: ",", omittingEmptySubsequences: true)\nprint(withoutEmpties) // ["1", "2", "4", "5"]
\n\n

如果您需要在Swift中将字符串拆分为Substring数组,并且想要控制空元素,请选择split。要获得[String],只需添加.map(String.init)。

\n\n
let result: [String] = "a,b,c".split(separator: ",").map(String.init)\nprint(result) // ["a", "b", "c"]
\n\n

博客

书籍推荐