Как заставить macOS представить отброшенный файл .stl как publi c .standard-tesselated-geometry-format? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь добавить поддержку перетаскивания в мое MacOS-приложение SwiftUI, чтобы пользователь мог перетаскивать .stl файлы в окно. У меня работает дроп, но мне кажется, что я могу проверить только по public.file-url, а не по указанным c public.standard-tesselated-geometry-format (предоставляется ModelIO как kUTTypeStereolithography).

В моем коде я делаю что-то вроде этого:

    func
    validateDrop(info inInfo: DropInfo)
        -> Bool
    {
        debugLog("STL: \(kUTTypeStereolithography)")
        let has = inInfo.hasItemsConforming(to: [kUTTypeFileURL as String, kUTTypeData as String])
        return has
    }

    func
    performDrop(info inInfo: DropInfo)
        -> Bool
    {
        inInfo.itemProviders(for: [kUTTypeFileURL as String, kUTTypeData as String, kUTTypeStereolithography]).forEach
        { inItem in
            debugLog("UTIs: \(inItem.registeredTypeIdentifiers)")
            inItem.loadItem(forTypeIdentifier: kUTTypeFileURL as String, options: nil)
            { (inURLData, inError) in
                if let error = inError
                {
                    debugLog("Error: \(error)")
                    return
                }

                if let urlData = inURLData as? Data,
                    let url = URL(dataRepresentation: urlData, relativeTo: nil)
                {
                    debugLog("Dropped '\(url.path)'")
                }
            }
        }
        return true
    }

Это работает достаточно хорошо, если я ищу kUTTypeFileURL, но не если я ищу kUTTypeStereolithography, когда я перетаскиваю файл .stl на view.

Я пытался объявить его импортированным типом, но а) который, похоже, не работал, и б) не должен был быть необходим, поскольку наличие константы symboli c подразумевает, что macOS знает о тип. Я также не знаю, как это соответствует, хотя я пробовал и public.data, и public.file-url.

Я бы очень хотел иметь возможность проверить тип, чтобы пользователь не вводил в заблуждение по капле пользовательского интерфейса. В настоящее время это означает, что мое представление примет перетаскивание, если это не файл .stl, чего я не хочу.

...