Swift - open built-in iOS Dictionary to find word meaning
Asked Answered
Y

2

9

In my project I'd like to open iOS built-in Dictionary to find word meaning, or even better, get the meaning of the word directly in my app.

At the moment I found how to check a string is spelled correctly using UITextChecker

func wordIsReal(word: String) -> Bool {
    let checker = UITextChecker()
    let range = NSMakeRange(0, count(word))
    let misspelledRange = checker.rangeOfMisspelledWordInString(word, range: range, startingAt: 0, wrap: false, language: "en")

    return misspelledRange.location == NSNotFound
}
Yogurt answered 16/9, 2015 at 8:51 Comment(1)
possible duplicate of Access iOS dictionary programmaticallyDiscriminator
Y
15

I found the solution for Objective-C:

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

and I've edited it for Swift 3:

let word = "home"
if UIReferenceLibraryViewController.dictionaryHasDefinitionForTerm(word) {
        let ref: UIReferenceLibraryViewController = UIReferenceLibraryViewController(term: word)
        self.presentViewController(ref, animated: true, completion: nil)
}

and the same for Swift 4:

let word = "home"
if UIReferenceLibraryViewController.dictionaryHasDefinition(forTerm: word) {
    let ref: UIReferenceLibraryViewController = UIReferenceLibraryViewController(term: word)
    self.present(ref, animated: true, completion: nil)
}

This solution allows to open the built-in dictionary if the word has a definition in the dictionaries saved in the device

Yogurt answered 16/9, 2015 at 9:36 Comment(2)
Is there a way to do this on Mac (without uikit)?Kreager
Tested. It's working in iOS14. A pre-downloaded dictionary is required to present the view.Somite
D
1

Try with this

func wordIsReal(word: String) -> Bool {
    let checker = UITextChecker()
    let range = NSMakeRange(0, count(word))
    let misspelledRange = checker.rangeOfMisspelledWordInString(word, range: range, startingAt: 0, wrap: false, language: "en_US")
    NSLog("misspelledRange:\(misspelledRange)")
    NSLog("word:\(word)")
    var arrGuessed:NSArray? = checker.guessesForWordRange(misspelledRange, inString: word, language: "en_US")as NSArray!
  NSLog("arrGuessed:\(arrGuessed)")
    //var correctedStr = textAsNSString.stringByReplacingCharactersInRange(misspelledRange, withString: arrGuessed.objectAtIndex(0) as String)
    return misspelledRange.location == NSNotFound
}
Duclos answered 16/9, 2015 at 9:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.