2

したがって、Foundation を使用すると、NSCharacterSet を使用して文字セットを定義し、文字列の文字メンバーシップをテストできます。Cocoa クラスを使用せずに、純粋に Swift で行いたいと考えています。

理想的には、コードは次のように使用できます。

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

    func isMember(character: Character) -> Bool

    func encodeCharacter(parameters) { accepts a closure }

    func decodeCharacter(parameters) { accepts a closure }
}

これはおそらく非常に負荷の高い質問です。しかし、Swifter の皆さんの考えを知りたいです。

4

1 に答える 1

2

containsString を初期化し、グローバル関数を使用することで、文字セットのメンバーシップを既にテストできます。

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]

Decodeもう少し手間がかかりますが、そのための機能があることは知っています...

編集:これは、文字セットの文字を「%」に置き換え、その後に文字の 16 進値を続けます。

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"

デコードは、これも少し難しいですが、できると確信しています...

于 2015-01-28T02:51:51.183 に答える