I saw the following paragraph in the documentation for -[NSItemProvider loadItemForTypeIdentifier:options:completionHandler:]
:
An extension can specify an expected class for the item’s value in the completion handler block. An error is returned in the completion block’s error parameter if the returned item’s value class doesn’t match the specified class. An item provider can perform simple type conversions for the item specified in the block, such as from NSURL to NSData or NSFileWrapper, or from NSData to UIImage (in iOS) or NSImage (in OS X).
Not that I'd ever want to make an API as crazy as that, but now I'm curious. How does runtime block type inference work?