在Swift中使用字符集

它们并不是特别常见,并且您不会像在数组,字典或循环中那样频繁地在代码中遍历它们。 但是,当您确实需要它们时,它们可能会非常有用。 我在说什么 字符集! 第一次我真的需要使用一个字符集时,初始化和实现一个字符集无疑使我感到困惑,因此,我当然想进一步探讨这个主题。

什么是字符集?

Apple告诉我们,字符集是一种类型的集-一种无序的唯一元素集合-包含符合Unicode的字符。 由于它们是无序的并且不包含重复项,因此字符集通常用于搜索操作,而不是用于存储和访问信息。

创建自己的字符集很容易。 下面,字符集元音被初始化为包含字母a,e,i,ou

将字符集付诸实践

现在,我们可以使用此字符集在字符串中进行搜索。 假设我有两个常量字符串, fullWordshortWord:

这些字符串是否包含元音中的任何字符? 我们如何检查? 我发现做到这一点的一种方法是使用rangeOfCharacter(from:)函数,该函数将字符集作为参数。 (由于使用该功能不能使字符集无效,因此还需要将其拆开。)

虽然这很笨拙,但肯定有一些更优雅的方法可以找到答案。 嗯 有什么我想念的吗? 字符集还有什么用呢?

字符集类型属性

字符集的一个非常有用的方面是它们的类型属性。 基本上,这些都是基于Unicode类别的预包装字符组,可供您使用!

这些类型属性的一些示例是:

您可以在Apple的API参考中找到完整的字符集列表。 让我们在下面更详细地研究其中的一些。

标点属性

如果您对字符集可能包含的内容有所了解,但又不了解每个字符的详尽列表,那么字符集类型属性将是极好的选择。 例如,想到标点符号。 如果您想删除字符串中的所有标点符号,而只剩下字母,该怎么办? 您将搜索并排除哪些标点符号?

我想取出句号逗号感叹号问号冒号分号连字符破折号撇号引号正斜杠反斜杠 ……而我什至不确定实际上是否能涵盖所有内容。 与号, 方括号括号呢? 像西班牙语这样的不同语言的标点符号呢? (你好!)

标点符号太多,无法自信地手动解决它们。 但是幸运的是,Unicode和字符集属性标点符号为我们做到了!

简单吧? 但是CharacterSet.punctuationCharacters中实际上包含哪些字符? Apple在其文档中声明了punctationCharacters属性,但未提供有关其包含的任何进一步信息,并且在操场上打印该设置也不会产生结果。

回顾我们的第一个定义, 字符集是一组符合Unicode的字符。 因此,有关punctuationCharacters类型中符合Unicode的字符的更多信息,让我们直接看一下源代码:Unicode。

查看Unicode标准版本9.0常规标点为我们提供了Unicode当前分类的每个标点符号的图表。 除了标准的拉丁字母标点符号外,它们还有一些您每天都看不到的符号,例如“※”,Unicode告诉我们的是日文kome和乌尔都语段分隔符。 凉!

符号属性

另一个有用的字符集属性是symbol 。 您知道表情符号被Unicode分类为符号吗? 如果我们想手动考虑所有表情符号的可能性,然后将它们从字符串中删除,这将花费大量的时间。

但是使用字符集,有更好的方法! 看一下这个字符串:

因为Unicode已经将所有表情符号分组在symbols类别中,所以删除表情符号所需要做的就是调用character setsymbols属性。

da! 可以了,好了! (对不起,我无法抗拒!)

我希望这会让您对使用字符集,尤其是其属性可以做的一些很酷的事情有所了解。 谢谢阅读!