Swift: NSDragOperationNone 在哪里?

Swift: Where Is NSDragOperationNone?

在 Objective-C 中,我可以通过各种 drag/drop 方法 return NSDragOperationNone 来表明我不想处理给定的拖动。 NSDragOperation:

的 Objective-C 版本的 Apple 文档中明确列出了这一点

https://developer.apple.com/documentation/appkit/nsdragoperation?language=objc

但是,如果您查看 Swift 的页面,或者您查看 Apple Swift headers 中的 NSDragOperation 定义,则 .none 不是一个选项。

那么...如何拒绝 Swift 中的拖动操作?在这样的方法中:

func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation

注意:

1) 我明确处理 AppKit 和 macOS,而不是 UIKit 或 iOS。

2) 我意识到我可以用 0 的原始值初始化 NSDragOperation,这是在 Objective-C 中赋予 NSDragOperationNone 的值,但这很脆弱。 Swift 拒绝拖拽的方法是什么?

您可能已经意识到这一点,但 NSDragOperation 是一个位掩码。每个 case 的值都是 2 的幂,你应该使用 | 在 Objective-C.

中屏蔽它们

在 Swift 中,NSDragOperation 被桥接以符合 OptionSet 并且您可以使用类似集合的语法来使用它们,如下所示:

let dragOp: NSDragOperation = [.copy, .link]

所以 none 操作只是一个空集:

let dragOp: NSDragOperation = []

使用[]。 .none 已弃用。参见 https://forums.developer.apple.com/thread/65205