在Objective-C中,我可以从各种拖放方法返回NSDragOperationNone
,以指示我不想处理给定的拖动。这是在Apple的文档中明确列出的NSDragOperation
的Objective-C版本:
https://developer.apple.com/documentation/appkit/nsdragoperation?language=objc
但是,如果您查看Swift的页面,或者查看Apple的Swift标题中的NSDragOperation
定义,则.none
不是一个选项。
那么......如何在Swift中拒绝拖动操作?在如下方法中:
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation
1)我明确地处理AppKit和macOS,而不是UIKit或iOS。
2)我意识到我可以用NSDragOperation
的rawvalue初始化0
,这是在Objective-C中给NSDragOperationNone
赋予的值,但这很脆弱。什么是斯威夫特减少拖累的方式?
你可能已经意识到这一点,但是NSDragOperation
有点面具。每个案例的值是2的幂,你应该使用|
来掩盖它们在Objective-C中。
在Swift中,NSDragOperation
被桥接以符合OptionSet
,你可以使用类似集合的语法:
let dragOp: NSDragOperation = [.copy, .link]
所以none
操作只是一个空集:
let dragOp: NSDragOperation = []
使用 []。 .none已弃用。见https://forums.developer.apple.com/thread/65205