无法将调用结果类型 'Set<String>' 转换为预期类型 'String' 错误

Cannot convert call result type 'Set<String>' to expected type 'String' error

我正在处理旧的 Swift 3 项目,将其更新到 Swift 4.2 后出现此错误。它似乎在 Swift 3 中工作正常。我必须声明 let NSURLPboardType = NSPasteboard.PasteboardType(kUTTypeURL as String) 因为 NSURLPboardType 在 Swift 4.2 中不存在,但代码是相同的。

enum SparkleDrag {
    static let type = "com.razeware.StickerDrag.AppAction"
    static let action = "make sparkles"
}

let NSURLPboardType = NSPasteboard.PasteboardType(kUTTypeURL as String)
  
var nonURLTYpes: Set<String> {return [String(kUTTypeTIFF), SparkleDrag.type]}
  
var acceptableTypes: Set<String> {return [nonURLTYpes.union(NSURLPboardType)]}

union中的“u”下划线是错误,但我不太明白问题的本质。任何指导将不胜感激。

问题是 NSURLPboardType 不是 Set<String>,因此联合无法工作。

如果你想得到这样的东西:

["com.razeware.StickerDrag.AppAction", "public.url", "public.tiff"]

aceptableTypes 中,您可以简单地放弃 NSURLPboardType 并执行此操作:

enum SparkleDrag {
    static let type = "com.razeware.StickerDrag.AppAction"
    static let action = "make sparkles"
}

// let NSURLPboardType = NSPasteboard.PasteboardType(kUTTypeURL as String)
  
var nonURLTYpes: Set<String> {return [String(kUTTypeTIFF), SparkleDrag.type]}
  
var acceptableTypes: Set<String> {return nonURLTYpes.union([kUTTypeURL as String])}