如何在 SwiftUI 中获取已删除文件的文件名?

Posted

技术标签:

【中文标题】如何在 SwiftUI 中获取已删除文件的文件名?【英文标题】:How to get the filename of dropped file in SwiftUI? 【发布时间】:2020-02-23 02:26:50 【问题描述】:

我一直在尝试找出如何将图像的文件名放入 SwiftUI 视图中。

代码片段如下:

struct MainView: View, DropDelegate 

  @ObservedObject var userState : UserState

  var body : some View 
    Group 
      if (self.userState.editing) 
        BlackoutView()
       else 
        DropView()
      
    
    .frame(minWidth: 320, idealWidth: 640, maxWidth: .infinity, minHeight: 240, idealHeight: 480, maxHeight: .infinity, alignment: .center)
    .onDrop(of: [(kUTTypeImage as String), "public.pdf"], delegate: self)
  

  func dropUpdated(info: DropInfo) -> DropProposal? 
    let proposal = DropProposal.init(operation: .copy)
    return proposal
  

  func performDrop(info: DropInfo) -> Bool 
    print("perform drop")
    userState.editing = true
    return true
  



当我将图像放到应用程序上时,它会运行 performDrop。怎样才能获得拖放到应用程序上的图像的文件名?

它在 macOS 上运行。

【问题讨论】:

【参考方案1】:

花了一个多小时在 API 上苦苦挣扎(文档几乎不存在),这对我有用:

// The onDrop registration
.onDrop(of: [(kUTTypeFileURL as String)], delegate: self)

...

func performDrop(info: DropInfo) -> Bool 

    guard let itemProvider = info.itemProviders(for: [(kUTTypeFileURL as String)]).first else  return false 

    itemProvider.loadItem(forTypeIdentifier: (kUTTypeFileURL as String), options: nil) item, error in
        guard let data = item as? Data, let url = URL(dataRepresentation: data, relativeTo: nil) else  return 
        // Do something with the file url
        // remember to dispatch on main in case of a @State change
    

    return true

请注意,我省略了任何验证,因此此代码会从任何已删除的文件中获取第一个 url

【讨论】:

以上是关于如何在 SwiftUI 中获取已删除文件的文件名?的主要内容,如果未能解决你的问题,请参考以下文章

如何从文件系统中获取已删除文件夹的完整路径

如何在 SwiftUI 中使用 .fileimporter 保存音频文件并检索文件并在 SwiftUI 列表中显示它们的文件名?

如何使用 Swift/SwiftUI 从 ImagePicker 获取选定的图像文件名

在 swiftUI 列表中添加、选择和删除文件名 - MacOS

SQL 通过多个 DELETE 查询获取文件中已删除行的总数

如何在不使用文件或文件路径的情况下获取文件系统(不仅仅是已安装的)中 APK 文件的信息?