Связанная статья является частным случаем.Как правило, вам не нужно делать так много, чтобы получить то, что вы пытаетесь сделать.Единственная проблема заключается в том, что вы не можете использовать сохраненные свойства.Вы должны использовать вычисленные свойства.Так, например, если бы вы сделали это (сохраненное свойство):
static let writableTypeIdentifiersForItemProvider = ["public.url"]
Вам просто нужно сделать это вместо (эквивалентное вычисляемое свойство):
static var writableTypeIdentifiersForItemProvider: [String] { return ["public.url"] }
СвязанныйВ статье рассматривается случай, когда необходимо, чтобы свойство было доступно для записи, а это означает, что вам необходимо предоставить хранилище для него, но это более редкий случай.
На практике, если вы хотите, чтобы CellConfigurator
соответствовал NSItemProviderWriting
, тогда это будет выглядеть следующим образом:
protocol CellConfigurator: NSItemProviderWriting { ... }
А затем CollectionViewCellConfigurator
необходимо унаследовать от NSObject
(чтобы получить NSObjectProtocol
):
class CollectionViewCellConfigurator<CellType: ConfigurableCell, DataType: Hashable>: NSObject ...
Это означаетчто hash
нужно добавить override
:
override var hash: Int { ... }
И, наконец, вы реализуете методы NSItemProviderWriting
:
static var writableTypeIdentifiersForItemProvider: [String] { return [...] }
func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? {
// ...
}
(где ...
- это то, что выхочу для этого типа)
Тот же процесс идет для NSItemProviderReading
.