String 定义自定义纯Swift字符集 >使用基础,可以使用NScript集合定义字符串中的字符集和测试字符成员资格。我希望这样做没有可可类,但在一个纯粹的快速方式

String 定义自定义纯Swift字符集 >使用基础,可以使用NScript集合定义字符串中的字符集和测试字符成员资格。我希望这样做没有可可类,但在一个纯粹的快速方式,string,swift,character-encoding,character,nscharacterset,String,Swift,Character Encoding,Character,Nscharacterset,理想情况下,可以这样使用代码: struct ReservedCharacters: CharacterSet { characters "!", "#", "$", "&", ... etc. func isMember(character: Character) -> Bool func encodeCharacter(parameters) { accepts a closure } func decodeCharacter(parame

理想情况下,可以这样使用代码:

struct ReservedCharacters: CharacterSet {
    characters "!", "#", "$", "&", ... etc.

    func isMember(character: Character) -> Bool

    func encodeCharacter(parameters) { accepts a closure }

    func decodeCharacter(parameters) { accepts a closure }
}

这可能是一个非常复杂的问题。但是我想看看你的快速者是怎么想的。

你已经可以通过初始化字符串和使用
包含的
全局函数来测试字符集中的成员资格:

let vowels = "aeiou"

let isVowel = contains(vowels, "i") // isVowel == true
就您的
encode
decode
功能而言,您只是想获得字符的8位或16位编码吗?如果是这种情况,则只需将它们转换为字符串,并在那里访问
utf8
utf16
属性:

let char = Character("c")

let a = Array(String(char).utf8)
println()          // This prints [99]
解码
需要更多的工作,但我知道它有一个功能

编辑:这将用“%”替换字符集中的字符,后跟该字符的十六进制值:

let encode: String -> String = { s in
    reduce(String(s).unicodeScalars, "") { x, y in
        switch contains(charSet, Character(y)) {
        case true:
            return x + "%" + String(y.value, radix: 16)
        default:
            return x + String(y)
        }
    }
}

let badURL = "http://why won't this work.com"
let encoded = encode(badURL)
println(encoded)   // prints "http://why%20won%27t%20this%20work.com"

同样,解码有点困难,但我相信它是可以做到的…

因此,这将在URL/URI编码中应用。contains()函数对于isMember来说可以很好地工作,但是对于“翻译”或使用百分比编码字符串中的特定字符,则需要更改。例如,“!”->%21。使用字符集会很方便,因为成员资格可以通过在集合中定义特定字符来测试,编码可以通过闭包或外部函数来完成。这是一个很好的实现!我希望有一种测试成员资格的方法,这种方法不只是一个字符串,而是可以的。如果需要的话,我可以找到一种方法来提供包装器。至于解码,我会使用一个diffract()函数,该函数根据符号和十六进制查找来分隔URL/URI中的字符串。。。但实际上,对URI/URL进行解码真的有什么需要/用途吗?您可以测试NSCharacterSet(即小写集、符号集等)中的成员身份,但它更复杂,因为Swift字符可以由多个unicode代码点组成。事实上,我曾对此进行过相当深入的研究,并就此写了一篇博客文章。是的,这是真的。这是一篇很棒的博客文章!不幸的是,整个目标是纯粹的快速无基础,可可类。任何带有NeXTSTEP前缀的内容都是非初学者。我的项目是建立一个纯Swift可可替代品。