在Swift中使用字符集
它们并不是特别常见,并且您不会像在数组,字典或循环中那样频繁地在代码中遍历它们。 但是,当您确实需要它们时,它们可能会非常有用。 我在说什么 字符集! 第一次我真的需要使用一个字符集时,初始化和实现一个字符集无疑使我感到困惑,因此,我当然想进一步探讨这个主题。
什么是字符集?
Apple告诉我们,字符集是一种类型的集-一种无序的唯一元素集合-包含符合Unicode的字符。 由于它们是无序的并且不包含重复项,因此字符集通常用于搜索操作,而不是用于存储和访问信息。
创建自己的字符集很容易。 下面,字符集元音被初始化为包含字母a,e,i,o和u 。
将字符集付诸实践
现在,我们可以使用此字符集在字符串中进行搜索。 假设我有两个常量字符串, fullWord和shortWord:
这些字符串是否包含元音中的任何字符? 我们如何检查? 我发现做到这一点的一种方法是使用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 set的symbols属性。
da! 可以了,好了! (对不起,我无法抗拒!)
我希望这会让您对使用字符集,尤其是其属性可以做的一些很酷的事情有所了解。 谢谢阅读!