0

2 つの単語に含まれる文字を比較しています。これを達成しようとする中で、Set(aka NSSet) はこのタスクを達成するための方法のように思えました。一致すると誤検知が返されることがわかったので、代わりにCountedSet(aka NSCountedSet) を使用しようとしています。

問題なく初期化できますが、初期化子を機能さSetせることができませんCountedSet。これが私がやったことです...

私はから始めますString

// Let's say myTextField.text = "test"
let textFieldCharacters = myTextField.text?.characters
// word is a string from the ENABLE list of words
let wordCharacters = word.characters

次に、文字を次のようにダンプしますArray

var wordCharactersArray = [Character]()
for character in wordCharacters {
    wordCharacterArray.append(character)
}


var textFieldCharactersArray = [Character]()    
for character in textFieldCharacters {
    wordCharacterArray.append(character)
}

次にSet、文字配列からを作成します。

let textFieldSet = Set<Character>(textFieldCharactersArray)
let wordSet = Set<Character>(wordCharactersArray)

最後に、が次textFieldSetのスーパーセットであるかどうかをテストしwordSetます。

textFieldSet.isSuperset(of: wordSet)

例に戻ると、ifmyTextField.textが「test」の場合word、文字が のスーパーセットである値を返していますwordSetが、個々の要素の数は の文字数と一致しません。myTextField.text

私の問題を調査したところ、CountedSet(fka NSCountedSet) が見つかりました。これで問題が解決すると思います。2 つのメソッド シグネチャがあります。

public convenience init(array: [AnyObject])
public convenience init(set: Set<NSObject>)

次のように2セットの文字を初期化しようとしました:

let textFieldSet = CountedSet(array: textFieldCharacterArray)
let wordSet = CountedSet(array: wordCharacterArray)

セットに対して次のエラーが表示されます

タイプ '[Character]' の値を予期される引数タイプ '[AnyObject]' に変換できません。

だから私はこのようにセットを初期化しようとしました:

let textFieldSet = CountedSet(array: textFieldCharacterArray as! [AnyObject])

次のエラーが発生します。

「AnyObject」は「Character」のサブタイプではありません

CountedSetまた、メソッド シグネチャごとにを初期化しようとしましたSetが、それを実行しようとするとエラーが発生します。

aを初期化する方法についての提案CountedSetは大歓迎です。

4

1 に答える 1