Skip to content

Instantly share code, notes, and snippets.

@imthath-m
Created August 28, 2020 09:30
Show Gist options
  • Save imthath-m/ab1f9e23ef5a3dad8f514e9ffa0ec1a3 to your computer and use it in GitHub Desktop.
Save imthath-m/ab1f9e23ef5a3dad8f514e9ffa0ec1a3 to your computer and use it in GitHub Desktop.
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