以编程方式访问 iOS 字典

问题描述 投票:0回答:8

我正在寻找一种以编程方式访问 iOS 字典的方法。我需要的是从自定义应用程序内部检索特定语言的单词列表。
是否可以?是否有任何 API 可以提供此(或类似)功能?
我检查了苹果文档,但没有找到任何有用的东西......有人可以指出我正确的方向吗?

objective-c ios dictionary
8个回答
41
投票

一个API,用于调出内置词典UI(不是原始问题,而是在某些响应中提出的),包括检查是否定义了给定单词:

if ([UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:@"word"]) {
    UIReferenceLibraryViewController* ref = 
        [[UIReferenceLibraryViewController alloc] initWithTerm:@"word"];
    [currentViewController presentViewController:ref animated:YES completion:nil];
}

13
投票

我认为没有公共 API 可以访问嵌入式词典。最接近的是使用 UITextChecker 但这可能无法满足您的需求

作为替代方案,您可以找到并嵌入您想要的语言的单词词典吗?可能需要一些额外的工作


13
投票

没有 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。


3
投票

没有 API 可以完成您所要求的操作。


3
投票

我很久以前就遇到了类似的问题,并按照其他人的建议做了:在我的应用程序中嵌入一本英语词典。从那时起,我将我的解决方案变成了一个静态库,可以在 www.lexicontext.com 上获得(请注意,它需要花费几美元)。考虑到下载它的开发者数量,这似乎是一个常见问题......


3
投票

如果您可以使用私有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);
}

3
投票

正如 @mrzzmr 已经指出的那样,有一个公共 API - 这里是 SWIFT 中的代码:

if UIReferenceLibraryViewController.dictionaryHasDefinition(forTerm: "word") {
    var childVC = UIReferenceLibraryViewController(term: "word")
    someParentVC.present(childVC, animated: true, completion: nil)
}

0
投票

即使没有API,长按选中的单词也可以自动使用。

© www.soinside.com 2019 - 2024. All rights reserved.