以编程方式访问iOS词典

时间:2011-09-14 16:45:27

标签: objective-c ios dictionary

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

8 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:10)

没有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的README说iOS单词列表使用ftp://ftp.ox.ac.uk/pub/wordlists

对于即时搜索,您需要在适合前缀搜索的结构上加载单词,例如trie。这是sample project,我就是这样做的。

如果您需要字典,请在线获取一个字典,然后在trie节点中包含指向单词条目的指针。如果加载花费太多时间,您可以尝试在后台加载,或压缩或序列化trie。

答案 3 :(得分:3)

没有API可以满足您的要求。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

已经有一个公共API,如@mrzzmr所述-这是SWIFT中的代码:

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

答案 7 :(得分:0)

即使没有API,如果用户长按所选单词,也可以自动使用。