import Foundation import UIKit import RxSwift import Photos class PhotoWriter: NSObject { enum Errors: Error { case couldNotSavePhoto } static func save(_ image: UIImage) -> Observable<String> { return Observable<String>.create { observer in var saveAssetId: String? PHPhotoLibrary.shared().performChanges({ let request = PHAssetChangeRequest.creationRequestForAsset(from: image) saveAssetId = request.placeholderForCreatedAsset?.localIdentifier }) { success, error in DispatchQueue.main.async { guard success, let saveAssetId = saveAssetId else { observer.onError(Errors.couldNotSavePhoto) return } observer.onNext(saveAssetId) observer.onCompleted() } } return Disposables.create() } } }