Свифт: Где NSDragOperationNone? - PullRequest
       36

Свифт: Где NSDragOperationNone?

2 голосов
/ 15 марта 2019

В Objective-C я могу вернуть NSDragOperationNone из различных методов перетаскивания, чтобы указать, что я не хочу обрабатывать данное перетаскивание. Это явно указано в Документах Apple для версии Objective-C NSDragOperation:

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

Однако, если вы просматриваете эту страницу для Swift или смотрите на определение NSDragOperation в заголовках Apple Swift, .none не вариант.

Итак ... как мне отказаться от операции перетаскивания в Swift? В методе, таком как:

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

Примечание:

1) Я имею дело с AppKit и macOS, а не с UIKit или iOS.

2) Я понимаю, что могу просто инициализировать NSDragOperation с необработанным значением 0, которое является значением, данным NSDragOperationNone в Objective-C, но это хрупко. Каков быстрый способ снижения сопротивления?

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Возможно, вы уже поняли это, но NSDragOperation - немного маски. Значение каждого случая - степень 2, и вы должны использовать | для маскировки их в Objective-C.

В Swift NSDragOperation соединен мостом, чтобы соответствовать OptionSet, и вы можете использовать их с подобным множеству синтаксисом, подобным этому:

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

Итак, операция none - это просто пустой набор:

let dragOp: NSDragOperation = []
2 голосов
/ 15 марта 2019

Используйте []. .none устарела. Смотри https://forums.developer.apple.com/thread/65205

...