Я пытаюсь добавить поддержку перетаскивания в мое 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
, чего я не хочу.