Swift 4: нет такого модуля «CoreServices.DictionaryServices» - PullRequest
0 голосов
/ 08 января 2019

Я читал статью, в которой рассказывается о Core Services, и решил использовать одну из них. Я импортирую Core Services и добавляю библиотеку в XCode, но она не работает.

Пример кода:

import Foundation
import CoreServices.DictionaryServices

func define(_ word: String) -> String? {
    let nsstring = word as NSString
    let cfrange = CFRange(location: 0, length: nsstring.length)

    guard let definition = DCSCopyTextDefinition(nil, nsstring, cfrange) else {
        return nil
    }

    return String(definition.takeUnretainedValue())
}

define("apple") // "apple | ˈapəl | noun 1 the round fruit of a tree..."

Выдает ошибку «нет такого модуля» при импорте. Я также смотрю на документацию Apple , но нет объяснения, как ее реализовать и использовать.

Решение:

Благодаря людям, которые ответили ниже на мой вопрос, я провел небольшое исследование и нашел решение. По-видимому, я могу использовать словарь iOS, позвонив по номеру UIReferenceLibraryViewController, но в документации Apple говорится, что мы не должны использовать это приложение для словарного приложения. Очевидно, что недостаточно создать приложение-словарь, поскольку оно использует собственный ViewController и не настраивается.

Вот пример рабочего кода:

 let dic = UIReferenceLibraryViewController(term: textLabelOutlet.text as! String)
        dic.modalPresentationStyle = .popover // add this

        let popover = dic.popoverPresentationController
        popover?.sourceView = view
        popover?.sourceRect = CGRect(x: 32, y: 32, width: 64, height: 64)
        present(dic, animated: true)

Источник: UIReferenceLibraryViewController не может быть представлен как всплывающее окно (всегда покрывает полный экран)

Ответы [ 2 ]

0 голосов
/ 08 января 2019

CoreServices.DictionaryServices - это платформа OS X, а не iOS.

Вы можете нажать CoreServices.DictionaryServices и увидеть страницу в проекте приложения Mac.

/*
    DictionaryServices.h
    DictionaryServices framework

*/

/*!
    @typedef    DCSDictionaryRef
    @abstract   Opaque CF object that represents a dictionary file
*/
public class DCSDictionary {
}


@available(OSX 10.5, *)
public func DCSGetTermRangeInString(_ dictionary: DCSDictionary?, _ textString: CFString, _ offset: CFIndex) -> CFRange
0 голосов
/ 08 января 2019

CoreServices может быть доступно на всех платформах, но DictionaryServices, кажется, доступно только в macOS.

https://developer.apple.com/documentation/coreservices/1446842-dcscopytextdefinition

Только списки SDK: macOS 10.5+

...