我正在寻找一种以编程方式访问 iOS 字典的方法。我需要的是从自定义应用程序内部检索特定语言的单词列表。
是否可以?是否有任何 API 可以提供此(或类似)功能?
我检查了苹果文档,但没有找到任何有用的东西......有人可以指出我正确的方向吗?
有是一个API,用于调出内置词典UI(不是原始问题,而是在某些响应中提出的),包括检查是否定义了给定单词:
if ([UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:@"word"]) {
UIReferenceLibraryViewController* ref =
[[UIReferenceLibraryViewController alloc] initWithTerm:@"word"];
[currentViewController presentViewController:ref animated:YES completion:nil];
}
我认为没有公共 API 可以访问嵌入式词典。最接近的是使用 UITextChecker 但这可能无法满足您的需求
作为替代方案,您可以找到并嵌入您想要的语言的单词词典吗?可能需要一些额外的工作
没有 API,但如果您需要的只是一个单词列表,您可以从
/usr/share/dict/words
: 中读取它
NSString *allTheWords = [NSString stringWithContentsOfFile: @"/usr/share/dict/words"
encoding: NSUTF8StringEncoding
error: nil];
for (NSString *line in [allTheWords componentsSeparatedByString:@"\n"]) {
NSLog(@"%@",line);
}
如果您需要任意单词列表,您可以从多个在线资源中获取,这里是one。 /usr/share/dict/README 上的自述文件说 iOS 单词列表使用 ftp://ftp.ox.ac.uk/pub/wordlists
对于即时搜索,您需要将单词加载到适合前缀搜索的结构上,例如特里树。这是一个示例项目,我就是这样做的。
如果您需要一本字典,请在线获取一本,然后在 trie 节点中包含一个指向单词条目的指针。如果加载花费太多时间,您可以尝试在后台加载、压缩或序列化 trie。
没有 API 可以完成您所要求的操作。
我很久以前就遇到了类似的问题,并按照其他人的建议做了:在我的应用程序中嵌入一本英语词典。从那时起,我将我的解决方案变成了一个静态库,可以在 www.lexicontext.com 上获得(请注意,它需要花费几美元)。考虑到下载它的开发者数量,这似乎是一个常见问题......
如果您可以使用私有API,您可以使用以下代码来定义单词:
_UIDictionaryManager *manager = [%c(_UIDictionaryManager) assetManager];
id definitions = [manager _definitionValuesForTerm:[self queryString]];
for(_UIDefinitionValue *item in definitions) {
myModel = self;
NSMutableAttributedString *def = [item definition];
NSString *str = [def string];
HBLogDebug(@"%@ = %@", [item localizedDictionaryName], str);
}
正如 @mrzzmr 已经指出的那样,有一个公共 API - 这里是 SWIFT 中的代码:
if UIReferenceLibraryViewController.dictionaryHasDefinition(forTerm: "word") {
var childVC = UIReferenceLibraryViewController(term: "word")
someParentVC.present(childVC, animated: true, completion: nil)
}
即使没有API,长按选中的单词也可以自动使用。