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
は大歓迎です。