名为CocoaDragAndDrop的示例应用程序使用一个名为enumerateDraggingItemsWithOptions的方法。这是在Obj:
[sender enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
forView:self
classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
searchOptions:nil
usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop) {
if ( ![[[draggingItem item] types] containsObject:kPrivateDragUTI] ) {
*stop = YES;
} else {
[draggingItem setDraggingFrame:self.bounds contents:[[[draggingItem imageComponents] objectAtIndex:0] contents]];
}
}];您将如何快速地编写这段代码?
我试过这样做:
sender.enumerateDraggingItemsWithOptions(
enumOptions: NSDraggingItemEnumerationOptions.Concurrent,
forView: self,
classes: [NSPasteboardItem.self],
searchOptions: NSPasteboardURLReadingFileURLsOnlyKey,
usingBlock: { (draggingItem: NSDraggingItem, idx: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// ...
}
)我得到了以下错误:
Cannot convert the expression's type '(enumOptions: NSDraggingItemEnumerationOptions, forView: DragDropImageView, classes: $T5, searchOptions: NSString!, usingBlock: (NSDraggingItem, Int, UnsafeMutablePointer<ObjCBool>) -> Void)' to type 'NSPasteboardItem.Type'发布于 2014-10-31 09:00:16
Swift中的方法签名是
func enumerateDraggingItemsWithOptions(enumOpts: NSDraggingItemEnumerationOptions,
forView view: NSView, classes
classArray: [AnyObject],
searchOptions: [NSObject : AnyObject],
usingBlock block: (NSDraggingItem!, Int, UnsafeMutablePointer<ObjCBool>) -> Void)调用方法
sender.enumerateDraggingItemsWithOptions(
.Concurrent,
forView: self,
classes: [NSPasteboardItem.self],
searchOptions: [NSPasteboardURLReadingFileURLsOnlyKey:self])
{(draggingItem, idx, stop) in
// Code here
}发布于 2015-12-22 16:38:58
OS X 10.11中的签名已更改。
func enumerateDraggingItemsWithOptions(
enumOpts: NSDraggingItemEnumerationOptions,
forView view: NSView,
classes classArray: [AnyClass],
searchOptions: [String : AnyObject],
usingBlock block: (NSDraggingItem!, Int, UnsafeMutablePointer<ObjCBool>) -> Void) //因此,我们需要调整如下:
func f(sender:NSDraggingInfo) -> () {
var v:NSView = NSView()
let classArray:[AnyClass] = [NSPasteboardItem.self]
let item = NSPasteboardItem()
let searchOptions:[String:AnyObject] = [NSPasteboardURLReadingFileURLsOnlyKey:v]发布于 2014-10-28 08:25:46
这将编译,因此显示了正确的语法。我显式地定义参数以澄清类型:
import Foundation
import AppKit
func f(sender:NSDraggingInfo) -> () {
var v:NSView = NSView()
let classArray:[AnyObject] = [NSPasteboardItem.self]
let item = NSPasteboardItem()
let searchOptions:[NSObject:AnyObject] = [NSPasteboardURLReadingFileURLsOnlyKey:v]
sender.enumerateDraggingItemsWithOptions(
NSDraggingItemEnumerationOptions.Concurrent,
forView: v,
classes: classArray,
searchOptions: searchOptions,
usingBlock: { (draggingItem: NSDraggingItem!, idx: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// ...
}
)
}https://stackoverflow.com/questions/26569991
复制相似问题