首页 > 解决方案 > CharacterSet 和 CharacterSet.inverted 打印出来的一样

问题描述

我只是想知道 Swift 中的(倒置的)CharacterSet 是如何工作的。

假设我有以下两个字符集:

let invertedNumbers = CharacterSet(charactersIn: "0123456789").inverted
let numbers = CharacterSet(charactersIn: "0123456789")

当我使用打印功能记录两个字符集时

print(numbers) 

它在控制台中的显示与

print(invertedNumbers)

那就是

<CFCharacterSet Items(U+0030 U+0031 U+0032 U+0033 U+0034 U+0035 U+0036 U+0037 U+0038 U+0039)>

但是它们怎么可能完全一样呢?我很困惑,因为它们不是真的。当我问倒置的是否包含“a”时,它说true。另一方面,不倒置的说false。而且我喜欢它的工作方式,但是倒置的日志记录不是错误的吗?

标签: swiftxcodecocoaswift4.2

解决方案


倒转字符集在 Swift 中确实有效,尽管您不能真正打印它。

例如,如果我想对一组字符进行百分比编码,那么我可以在 POST 中发送它:

let myPassword = "Hi+You?"
var charset1 = CharacterSet(charactersIn: "#%;<>?[\\]^'\"{|}&+")
let urlwithPercentEscapes = myPassword.addingPercentEncoding( withAllowedCharacters: charset1.inverted)
print(urlwithPercentEscapes)

当我打印 urlwithPercentEscapes 时,我将对该字符组中的任何字符进行百分比编码,因为我正在显示“withAllowedCharacters: charset1.inverted”。如果我使用“ withAllowedCharacters: charset1”,它将对不在该列表中的每个字符进行百分比编码。


推荐阅读