2017-06-14 19 views
7

Sau khi chuyển sang Swift4 mã tăng lỗi biên dịch sau:Swift 4: NSFilenamesPboardType không khả dụng. Thay vào đó sử dụng gì cho registerForDraggedTypes?

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) 
    } 
} 

một sự thay thế cho NSFilenamesPboardType trong Swift4 là gì? Làm thế nào để đăng ký loại kéo của file name (trong trường hợp của tôi mp3, wav, aiff, ... tập tin) trong Swift4?

Cảm ơn!

Trả lời

3

Tôi cũng đang gặp sự cố tương tự và giải pháp của tôi đang tạo một tùy chỉnh NSPasteboard.PasteboardType với kUTTypeURL. Tôi không chắc chắn nếu đây là cách thích hợp nhất (và tôi cho rằng không), nhưng nó hoạt động ít nhất là cho workaround thời gian.

let draggedType = NSPasteboard.PasteboardType(kUTTypeURL as String) 
    self.tableView?.registerForDraggedTypes([draggedType]) 

Ngoài ra, NSPasteboard.PasteboardType mới có phương pháp .fileNameType(forPathExtension: "foo"). Bạn nên thử. Tuy nhiên bằng cách nào đó, nó không hoạt động trong trường hợp của tôi.

+3

Như workaround cũng có thể làm như thế này: 'NSPasteboard.PasteboardType ("NSFilenamesPboardType") ' – Vlad

8

tôi sử dụng điều này như là giải pháp

//Temp solution for this 
    let NSFilenamesPboardTypeTemp = NSPasteboard.PasteboardType("NSFilenamesPboardType") 

    self.zipView.registerForDraggedTypes([NSFilenamesPboardTypeTemp]) 

nó dường như là một lỗi từ táo, họ đánh dấu sự api như làm việc trong chỉ 10.13.

i fire a bug to apple:)

+1

Tôi cũng đã làm điều này. Có vẻ nguy hiểm nhưng đang làm việc cho tôi. #yolo –

5

Tôi đã giải quyết khả năng tương thích ngược với phần mở rộng này:

extension NSPasteboard.PasteboardType { 

    static let backwardsCompatibleFileURL: NSPasteboard.PasteboardType = { 

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

    }() 

} 

Có nghĩa là bạn có thể sử dụng NSPasteboard.PasteboardType.backwardsCompatibleFileURL

+0

Hm. Nó không hoạt động tốt cho tôi, tôi không thể lấy được tên tập tin được kéo thích hợp; có một cái gì đó như 'Tùy chọn (tập tin: ///.file/id=6571367.2747208)' thay thế. Giải pháp Hack-ish @slboat hoạt động tốt hơn. –

Các vấn đề liên quan