#ios #swift #uiimage #storage
#iOS #swift #uiimage #Хранение
Вопрос:
Следуя документации на https://github.com/zalando/MapleBacon Я создал следующее, которое работало в Swift 2.3:
import MapleBacon
fileprivate let
_manager: ImageManager
, _storage: DiskStorage
, _stopwatch: Stopwatch
, _urlsLoading: [ String ]
required init ()
{
_manager = ImageManager.sharedManager
_storage = DiskStorage( name: "MyStorageName" )
_stopwatch = Stopwatch()
_urlsLoading = []
}
func loadImageBy ( Url url: String )
{
guard let nsurl = URL( string: url ) else { return }
_urlsLoading.append( url )
_manager.downloadImage(
atUrl: nsurl
, cacheScaled: true
, imageView: nil
, storage: _storage
, completion:
{
[ unowned self ] ( image, error ) -> Void in
self._stopwatch.startWith(
Delay: 0.02
, ForListener: self._onStopwatchComplete
)
}
)
}
Я обнаружил, что использование моего собственного Stopwatch
компонента для принудительной задержки 0.02 позволило MapleBacon.DiskStorage
сделать изображения доступными через его image( forKey: )
метод:
fileprivate lazy var _onStopwatchComplete: ( String, Any? ) -> Void =
{
[ unowned self ] ( key: String, data: Any? ) -> Void in
var url: String, imageCount = 0
// loop through urls of images being loaded
for _ in 0..<self._urlsLoading.count
{
url = self._urlsLoading[ imageCount ]
// image found
if let img = self._storage.image( forKey: url )
{
print( img )
// remove from list of urls of images being loaded and...
self._urlsLoading.remove( at: imageCount )
}
// image not found: continue waiting
else
{
imageCount = 1
}
}
self._stopwatch.stop()
}
Однако в версии MapleBacon для Swift 3.0 даже задержка в 5 секунд не приводит к появлению ссылки на изображение в _storage
, и, как и в версии Swift 2.3, она также не отображается в completion: ( image, error ) ->
закрытии.
Что нужно сделать с 3.0.0
версией MapleBacon
, чтобы успешно сохранить и извлечь изображения из DiskManager
, пожалуйста?
Спасибо [по крайней мере, за чтение].
PS: у меня нет необходимой оценки для создания MapleBacon
тега. Если кто-нибудь делает и может, это было бы здорово, спасибо.
Ответ №1:
Ян Горман, участник MapleBacon, определил это как подлинную ошибку в MapleBacon 3.0.0 и загрузил исправление для нее (список проблем здесь:https://github.com/zalando/MapleBacon/issues/38 ). Код, который работал в Swift 2.3, теперь также работает в Swift 3.0.