簡體   English   中英

參數類型'customClass.Type'不符合預期類型'NSItemProviderWriting'

[英]Argument type 'customClass.Type' does not conform to expected type 'NSItemProviderWriting'

iOS 11.x Swift 4

嘗試使用新的drop and drag協議實現自定義類,並需要一些超級編碼器幫助。 我創建了這個類。

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協議。 但是你傳遞的是一個實際的類,而不是類的實例。

更換customClass與你的實際情況customClass 如果此方法在customClass ,則傳遞self

let itemProvider = NSItemProvider(object: self)

順便說一句 - 如果遵循標准命名約定,這將不那么令人困惑。 類和結構名稱應以大寫字母開頭。 變量和方法名稱以小寫字母開頭。 所以你的customClass應該命名為CustomClass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM