2017-11-28 25 views
0

のiOS 11.xのスウィフト4引数の型「NSItemProviderWriting」

。私はこのクラスを作成しました。

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) 

だから、私は...コードが確実に... THAT表示することができません、思考することは

答えて

2

エラーメッセージが正しく、あなたのライン:

let itemProvider = NSItemProvider(object: customClass) 

は、上記の理由により正しくありません。 objectパラメータには、NSItemProviderWritingプロトコルに準拠する一部のクラスのインスタンスが必要です。しかし、クラスのインスタンスではなく、実際のクラスを渡しています。

customClasscustomClassの実際のインスタンスに置き換えてください。このメソッドがcustomClassの内部にある場合は、selfを渡します。

let itemProvider = NSItemProvider(object: self) 

ところで - あなたの後の標準的な命名規則ならば、これはそれほど混乱することでしょう。クラス名と構造体名は大文字で始まる必要があります。変数名とメソッド名は、小文字で始まります。したがって、customClassの名前はCustomClassとする必要があります。

+0

customClassはプロジェクト内のクラスですが、itemProviderと同じクラス内にはありません。その間にあなたの命名規則を採用しようと試みます! – user3069232

+0

'dragInteraction'メソッドが' customClass'実装の中にない場合は、 'self'をあなたのクラスのインスタンスを参照する他の変数に置き換えてください。 – rmaddy

+0

私は同じページにいるとは分かりません。値を持つCustomClassのインスタンスを作成する必要がある場合、I'vはドロップ内のすべての値をほとんど失ってドラッグします。ドラッグする画像を選択することができます。事前に設定する必要はありません。 – user3069232