gpt4 book ai didi

Swift:NSDragOperationNone 在哪里?

转载 作者:可可西里 更新时间:2023-11-01 00:27:48 29 4
gpt4 key购买 nike

在 Objective-C 中,我可以从各种拖放方法返回 NSDragOperationNone 以指示我不想处理给定的拖动。这在 Apple 文档中针对 NSDragOperation 的 Objective-C 版本明确列出:

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

但是,如果您查看 Swift 的页面,或者查看 Apple 的 Swift header 中的 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 = []

关于Swift:NSDragOperationNone 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55177965/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com