我正在比较两个单词中包含的字符。在寻求实现这一目标时,Set
(又名NSSet
)似乎是完成这项任务的方法。我发现它在匹配时返回误报,所以我尝试使用CountedSet
(aka NSCountedSet
) 代替。
我能够Set
毫无问题地初始化 a,但我无法让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)
回到我的示例,如果myTextField.text
是“测试”,我将返回word
其字符是 的超集的值wordSet
,但单个元素的计数与 的字符计数不匹配myTextField.text
在研究我的问题时,我发现了CountedSet
(fka NSCountedSet
),我认为它可以解决我的问题。它有两个方法签名:
public convenience init(array: [AnyObject])
public convenience init(set: Set<NSObject>)
我试过像这样初始化两组字符:
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
将不胜感激。