斯威夫特:NSDragOperationNone在哪里?

问题描述 投票:1回答:2

在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

NOTE:

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

2)我意识到我可以用NSDragOperation的rawvalue初始化0,这是在Objective-C中给NSDragOperationNone赋予的值,但这很脆弱。什么是斯威夫特减少拖累的方式?

swift drag-and-drop drag appkit
2个回答
3
投票

你可能已经意识到这一点,但是NSDragOperation有点面具。每个案例的值是2的幂,你应该使用|来掩盖它们在Objective-C中。

在Swift中,NSDragOperation被桥接以符合OptionSet,你可以使用类似集合的语法:

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

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

let dragOp: NSDragOperation = []

2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.