2017-02-15 25 views
3

Swift 3 CharacterSetを使用して、文字をフィルタリングするときに、Stringの文字をフィルタリングするのが早い段階です。するCharacterSetがFUNC containsStrange String.unicodeScalarsとCharacterSetの動作

と呼ばれるメソッドが含まれている(_メンバー:UnicodeScalar) - >するCharacterSetにおける特定UnicodeScalarのメンバーシップのためのブール
テスト。

ただし、これをテストしても正常な動作は得られません。

let characterSet = CharacterSet.capitalizedLetters 

let capitalAString = "A" 

if let capitalA = capitalAString.unicodeScalars.first { 
    print("Capital A is \(characterSet.contains(capitalA) ? "" : "not ")in the group of capital letters") 
} else { 
    print("Couldn't get the first element of capitalAString's unicode scalars") 
} 

私はCapital A is not in the group of capital lettersを取得していますが、それとは逆のことを期待しています。

多くのありがとうございます。

+2

Martin just beat私はそれに文字セットは、あなたが探している大文字Aを含んでいません: '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 「ᾋ」、「ᾌ」、「ᾍ」、「ᾎ」、「ᾏ」、「ᾘ」、「ᾙ」、「ᾚ」、「ᾛ」、「ᾜ」、「ᾝ」、「ᾞ」、「ᾟ」 "、"ᾨ "、"ᾩ "、"ᾪ "、"ᾫ "、"ᾭ "、"ᾮ "、"ᾯ "、"ᾼ "、"ῌ "、"ῼ "] ' – JAL

+2

Martin's答えが最初で正しかった、私はあなたが問題の根本を発見したと思う - 私は大文字が何であるか知りません! –

答えて

5

CharacterSet.capitalizedLetters は、Unicode General Categoryの文字を含む文字セットを「文字、タイトルケース」と返します。これは、 "大文字と小文字の組み合わせ(例:Dž、Lj、Nj、Dz)"です(Wikipedia: Unicode character propertyまたは Unicode® Standard Annex #44 – Table 12. General_Category Values)。

リストはUnicode Characters in the 'Letter, Titlecase' Categoryです。

また、文字の内容をダンプする NSArray from NSCharactersetから セットをコードを使用することができます:あなたはおそらくしたいことは

が文字を含む文字セットを返しますCharacterSet.uppercaseLettersある

extension CharacterSet { 
    func allCharacters() -> [Character] { 
     var result: [Character] = [] 
     for plane: UInt8 in 0...16 where self.hasMember(inPlane: plane) { 
      for unicode in UInt32(plane) << 16 ..< UInt32(plane + 1) << 16 { 
       if let uniChar = UnicodeScalar(unicode), self.contains(uniChar) { 
        result.append(Character(uniChar)) 
       } 
      } 
     } 
     return result 
    } 
} 

let characterSet = CharacterSet.capitalizedLetters 
print(characterSet.allCharacters()) 

// ["Dž", "Lj", "Nj", "Dz", "ᾈ", "ᾉ", "ᾊ", "ᾋ", "ᾌ", "ᾍ", "ᾎ", "ᾏ", "ᾘ", "ᾙ", "ᾚ", "ᾛ", "ᾜ", "ᾝ", "ᾞ", "ᾟ", "ᾨ", "ᾩ", "ᾪ", "ᾫ", "ᾬ", "ᾭ", "ᾮ", "ᾯ", "ᾼ", "ῌ", "ῼ"] 

Unicode一般カテゴリLuおよびLt

+0

偉大な答えですが、そのfileformat.info URLは私のために働いていません。 – JAL

+0

@JAL:今は動作しますか? –

+0

これらのリンクはより良いです、ありがとう。 – JAL