Swift 4: нет такого модуля 'CoreServices.DictionaryServices'
Я читал статью, рассказывающую о базовых сервисах, и решил использовать одну из них. Я импортирую 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)
2 ответа
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
CoreServices
может быть доступен на всех платформах, но DictionaryServices
кажется, доступен только на macOS.
https://developer.apple.com/documentation/coreservices/1446842-dcscopytextdefinition
Только списки SDK: macOS 10.5+