| //===----------------------------------------------------------------------===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See https://swift.org/LICENSE.txt for license information |
| // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| |
| @_exported import Foundation // Clang module |
| |
| @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) |
| extension NSItemProvider { |
| |
| @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) |
| public func registerObject< |
| T : _ObjectiveCBridgeable |
| > ( |
| ofClass: T.Type, |
| visibility: NSItemProviderRepresentationVisibility, |
| loadHandler: @escaping ((T?, Error?) -> Void) -> Progress? |
| ) where T._ObjectiveCType : NSItemProviderWriting { |
| self.registerObject( |
| ofClass: T._ObjectiveCType.self, visibility: visibility) { |
| completionHandler in loadHandler { |
| // Using `x as! T._ObjectiveCType?` triggers an assertion in the |
| // compiler, hence the explicit call to `_bridgeToObjectiveC`. |
| (x, error) in completionHandler(x?._bridgeToObjectiveC(), error) |
| } |
| } |
| } |
| |
| @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) |
| public func canLoadObject< |
| T : _ObjectiveCBridgeable |
| >(ofClass: T.Type) -> Bool |
| where T._ObjectiveCType : NSItemProviderReading { |
| return self.canLoadObject(ofClass: T._ObjectiveCType.self) |
| } |
| |
| @available(macOS 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *) |
| public func loadObject< |
| T : _ObjectiveCBridgeable |
| >( |
| ofClass: T.Type, |
| completionHandler: @escaping (T?, Error?) -> Void |
| ) -> Progress where T._ObjectiveCType : NSItemProviderReading { |
| return self.loadObject(ofClass: T._ObjectiveCType.self) { |
| x, error in completionHandler(x as! T?, error) |
| } |
| } |
| |
| } |