Created
August 28, 2020 09:30
-
-
Save imthath-m/ab1f9e23ef5a3dad8f514e9ffa0ec1a3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UniformTypeIdentifiers | |
import PhotosUI | |
@available(iOS 14, *) | |
extension PHPickerResult { | |
var fileName: String? { | |
guard let name = itemProvider.suggestedName else { return nil } | |
if let extn = itemProvider.itemType?.preferredFilenameExtension { | |
return name + ".\(extn)" | |
} | |
return name | |
} | |
} | |
@available(iOS 14.0, *) | |
extension NSItemProvider { | |
func loadData(onCompletion handler: @escaping (Result<Data, Error>) -> Void) { | |
guard let type = itemType else { | |
handler(.failure(LocalError.unknownType)) | |
return | |
} | |
loadDataRepresentation(forTypeIdentifier: type.identifier) { data, error in | |
DispatchQueue.main.async { | |
if let existingData = data { | |
handler(.success(existingData)) | |
} else if let existingError = error { | |
handler(.failure(existingError)) | |
} else { | |
handler(.failure(LocalError.unknown)) | |
} | |
} | |
} | |
} | |
var itemType: UTType? { | |
if let lastID = registeredTypeIdentifiers.last { | |
return UTType(lastID) | |
} | |
let preferredTypes: [UTType] = [.png,.gif,.heic,.heif,.jpeg,.livePhoto, | |
.mpeg,.mpeg2Video,.mpeg4Movie,.quickTimeMovie, | |
.image,.video,.movie] | |
for type in preferredTypes where self.hasItemConformingToTypeIdentifier(type.identifier) { | |
return type | |
} | |
return nil | |
} | |
} | |
enum LocalError: Error { | |
case unknownType | |
case unknown | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment