我正在构建自定义键盘扩展并希望像 Apple 一样实现自动完成功能。正如我所见,方法completionsForPartialWordRange
返回按字母顺序排序的单词列表。如何获得按使用情况排序的结果?
问问题
642 次
2 回答
2
文档completionsForPartialWordRange:inString:language:
说:
数组中的字符串按照它们应该呈现给用户的顺序排列——也就是说,更可能的完成出现在数组的最前面。
但是,结果非常清楚地按字母顺序排序,并且“更有可能完成的结果在数组中排在第一位”是不正确的。以下是使用 iOS 9 测试的:
NSString *partialWord = @"th";
UITextChecker *textChecker = [[UITextChecker alloc] init];
NSArray *completions = [textChecker completionsForPartialWordRange:NSMakeRange(0, partialWord.length) inString:partialWord language:@"en"];
iOS 单词补全"th"
:
thalami,
thalamic,
thalamus,
thalassic,
thalidomide,
thallium,
...
the,
...
因此,在获得单词补全后,需要再次对结果进行排序。
此方法的 OS XNSSpellChecker
版本没有同样的问题:
NSString *partialWord = @"th";
NSArray *completions = [[NSSpellChecker sharedSpellChecker] completionsForPartialWordRange:NSMakeRange(0, partialWord.length) inString:partialWord language:@"en" inSpellDocumentWithTag:0];
拼写检查词典中的完整单词列表,按照它们应该呈现给用户的顺序排列。
Mac OS X 单词完成"th"
:
the,
this,
that,
they,
thanks,
there,
that's,
...
提交雷达错误报告将是一个好主意,以便该行为有望在更高版本的 iOS 中得到修复。如果您想复制,我已将此报告为 rdar://24226582。
于 2016-01-18T02:05:36.227 回答
0
斯威夫特 4.0
func autoSuggest(_ word: String) -> [String]? {
let textChecker = UITextChecker()
let availableLangueages = UITextChecker.availableLanguages
let preferredLanguage = (availableLangueages.count > 0 ? availableLangueages[0] : "en-US");
let completions = textChecker.completions(forPartialWordRange: NSRange(0..<word.utf8.count), in: word, language: preferredLanguage)
return completions
}
于 2018-07-19T09:23:54.223 回答