En Objective-C, puedo devolver NSDragOperationNone desde varios métodos de arrastrar y soltar para indicar que no quiero manejar un arrastre determinado. Esto se enumera explícitamente en los Documentos de Apple para la versión Objective-C de NSDragOperation :
https://developer.apple.com/documentation/appkit/nsdragoperation?language=objc
Sin embargo, si ve esa página para Swift, o si mira la definición de NSDragOperation en los encabezados de Swift de Apple, .none no es una opción.
Entonces... ¿cómo rechazo una operación de arrastre en Swift? En un método como:
func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation1) Estoy tratando explícitamente con AppKit y macOS, no con UIKit o iOS.
2) Me doy cuenta de que puedo NSDragOperation con un valor bruto de 0 , que es el valor dado a NSDragOperationNone en Objective-C, pero eso es frágil. ¿Cuál es la forma Swift de rechazar un arrastre?
Es posible que ya se haya dado cuenta de esto, pero NSDragOperation es una máscara de bits. El valor de cada caso es una potencia de 2, y se supone que debes usar | para enmascararlos en Objective-C.
En Swift, NSDragOperation se conecta para ajustarse a OptionSet y puede usarlos con una sintaxis similar a la de un conjunto como esta:
let dragOp: NSDragOperation = [.copy, .link] Entonces, una operación none es solo un conjunto vacío:
let dragOp: NSDragOperation = []Usar []. .none está en desuso. Consulte https://forums.developer.apple.com/thread/65205