Swift 4:NSFilenamesPboardType 不可用.用什么代替 registerForDraggedTypes? [英] Swift 4: NSFilenamesPboardType not available. What to use instead for registerForDraggedTypes?

查看:16
本文介绍了Swift 4:NSFilenamesPboardType 不可用.用什么代替 registerForDraggedTypes?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

迁移到 Swift4 后,以下代码引发编译错误:

After migrating to Swift4 the following code raise compile error:

public final class MediaItemView: NSView {

   public override init(frame frameRect: NSRect) {
      super.init(frame: frameRect)

      // error: 'NSFilenamesPboardType' is unavailable in Swift:
      // use 'NSPasteboard.writeObjects(_:)' with file URLs
      let draggedTypes: [NSPasteboard.PasteboardType] = [NSFilenamesPboardType]
      registerForDraggedTypes(draggedTypes)
   }
}

Swift4 中 NSFilenamesPboardType 的替代品是什么?如何在 Swift4 中注册 file name 的拖动类型(在我的情况下为 mp3、wav、aiff、... 文件)?

What is a replacement for NSFilenamesPboardType in Swift4? How to register drag type of file name (in my case mp3, wav, aiff, ... files) in Swift4?

谢谢!

推荐答案

我已经解决了这个扩展的向后兼容性问题:

I've solved backwards compatibility with this extension:

extension NSPasteboard.PasteboardType {

    static let backwardsCompatibleFileURL: NSPasteboard.PasteboardType = {

            if #available(OSX 10.13, *) {
                return NSPasteboard.PasteboardType.fileURL
            } else {
                return NSPasteboard.PasteboardType(kUTTypeFileURL as String)
            }

    } ()

}

这意味着你可以使用 NSPasteboard.PasteboardType.backwardsCompatibleFileURL

这篇关于Swift 4:NSFilenamesPboardType 不可用.用什么代替 registerForDraggedTypes?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆