ios - 参数类型 'customClass.Type' 不符合预期类型 'NSItemProviderWriting'

标签 ios swift compiler-errors drag-and-drop

iOS 11.x swift 4

尝试实现自定义类以使用新的拖放协议(protocol)并需要一些 super 编码员的帮助。我创建了这个类。

import UIKit
import MobileCoreServices

class CustomClass: NSObject, NSItemProviderWriting, NSItemProviderReading {

var image2D:Data?

static var readableTypeIdentifiersForItemProvider = [kUTTypeData as String]

static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self {
    return try self.init(itemProviderData: data, typeidentifier: kUTTypeData as String)
}

required init(itemProviderData data: Data, typeidentifier: String) throws {
    super.init() 
    image2D = data
}

static var writableTypeIdentifiersForItemProvider = [kUTTypeData as String]

func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? {
    let data2E = image2D
    completionHandler(data2E, nil)
    return nil
}

}

它编译,看起来不错?然后我在这个调用中引用它。

func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] {
         let itemProvider = NSItemProvider(object: CustomClass)
        let dragItem = UIDragItem(itemProvider: itemProvider)
        return [dragItem]
    }

我收到错误消息...参数类型“CustomClass.Type”不符合预期类型“NSItemProviderWriting”...

但除此之外,似乎无法在这里、那里或任何地方找到更多关于如何推进此事的线索。

附带一点,我实现了其中一个,它奏效了......

  itemProvider.registerDataRepresentation(forTypeIdentifier: kUTTypeJPEG as String, visibility: .all)

我实现了其中一个,它也很有效......

itemProvider.registerFileRepresentation(forTypeIdentifier: kUTTypeJPEG as String, fileOptions: [.openInPlace], visibility: .all)

所以我在想,代码不能有那么错……当然……

最佳答案

错误信息是正确的,你的行:

let itemProvider = NSItemProvider(object: customClass)

由于所述原因不正确。 object 参数需要一个符合 NSItemProviderWriting 协议(protocol)的类的实例。但是您传递的是一个实际的类,而不是该类的一个实例。

customClass 替换为您的 customClass 的实际实例。如果此方法在您的 customClass 中,则传递 self

let itemProvider = NSItemProvider(object: self)

顺便说一句 - 如果您遵循标准命名约定,这会减少混淆。类和结构名称应以大写字母开头。变量和方法名称以小写字母开头。所以你的 customClass 应该命名为 CustomClass

关于ios - 参数类型 'customClass.Type' 不符合预期类型 'NSItemProviderWriting',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47534839/

相关文章:

c# - 为什么我的子类需要用默认参数覆盖?

java - 为什么会出现错误?

iOS:创建 UIImage 时出现 CGBitmapContextCreate 错误

objective-c - 编辑时如何更改 UITextField

swift - (Swift)如何检查数组的特定索引是否为空?

angular - 类型 'switchMap' 上不存在属性 'Observable<User>'

iphone - 缩放、裁剪和剪切视频 iPhone

ios - 将 zlib 压缩的 base64 字符串转换为 Uiimage 时出现问题

swift - 在 swift 中覆盖受限扩展方法的推荐方法,避免消息 "Ambiguous use of ' xxx'"

ios - 了解 iOS 崩溃 [SIGABRT ABORT]