質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

3回答

2457閲覧

AlamofireImageにはcompletionhandlerはないのでしょうか?

po_tato

総合スコア97

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/06/29 06:18

編集2022/01/12 10:55

Alamofireで非同期通信する際は、

Alamofire.request(.POST, url, parameters: parameters) .responseJSON { response in switch response.result { case .Success(let value): completionHandler(value, nil) case .Failure(let error): completionHandler(nil, error) }

このようにして、コールバック処理はconpletionHandlerが用意されていますが、
AlamofireImageの方にはないのでしょうか?
画像データを全て取得できたら、次の処理をするというようなことをしたいのですが、
それがないとなると皆様はどのように実装されてるのでしょうか?

知っている方がいらっしゃれば教えて頂けるとありがたいです。

追記:
ちなみにこのように自分の方ではAlamofireImageを使用しています。

Alamofire.request(url).responseImage { response in debugPrint(response.result) if let image = response.result.value { print("image downloaded: (image)") let imgratio:CGFloat = (image.size.height)/(image.size.width) let iw = CGFloat(self.sw) let resize = image.ResizeÜIImage(width: iw, height: iw*imgratio) self.banner.remove(at: Int(index)!) self.banner.insert(resize!, at: Int(index)!) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

completionHandlerってAlamofireが用意しているものではないと思います。
質問のコードを含む関数の引数ではないですか?

投稿2018/06/29 06:45

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

po_tato

2018/06/29 07:06

そうなんですね! とすると、処理が完了してから呼ばれるものでもないということでしょうか?
fuzzball

2018/06/29 07:15

呼ばれるんじゃなくて自分で呼ぶんですよ。 completionHandler(value, nil) って、completionHandler()という関数を呼んでいるだけです。
po_tato

2018/06/29 07:19

わかりました!ありがとうございます!
guest

0

やりたいことはこれじゃないのかな。

Swift

1 2var yourImageView:UIImageView! 3 4yourImageView.af_setImageWithURL( 5 URL(string: "http://imageurl/hoge.png")!, 6 placeholderImage: nil, 7 filter: nil, 8 imageTransition: .CrossDissolve(0.5), 9 completion: { response in 10 // ロード後処理 11 } 12) 13 14

参考

ちな、AlamofireImageはUIImageViewのextensionです。

投稿2018/06/29 07:10

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

po_tato

2018/06/29 07:19

これは何を用いているのでしょうか...? AlamofireImageでcompletionというのはできないということでしょうか?
fromageblanc

2018/06/29 07:25

”AlamofireImage.request( 〜 ”のような書き方はしませんよ。回答したとおり、UIImageViewのextensionとして提供されています。extensionが初耳ならそれから調べてください。
po_tato

2018/06/29 07:40

本文追記致しました。 このような方法で非同期でAlamofireImageを使用していたのですが、これは間違っているのでしょうか...?
guest

0

completionHandler自体は別途定義する必要があるかと思いますが、ImageDownloader使用すればを非同期で画像データを取得することができるかと思います。

Alamofire - ImageDownloader
https://github.com/Alamofire/AlamofireImage#downloading-an-image

func fetchImage(url: URL, completionHandler: (image: UIImage?) -> Void) { let downloader = ImageDownloader() let urlRequest = URLRequest(url: url) downloader.download(urlRequest) { response in if let image = response.result.value { completionHandler(image) return } completionHandler(nil) } }

追記

func updateImageView() { self.fetchImage(url: URL("https://xxx.xxxx.co.jp/xxx.jpg")!, completionHanlder: { (image, error) in /* 画像取得後の処理。 */ }); } func fetchImage(url: URL, completionHandler: (image: UIImage?, error: NSError?) -> Void) { let downloader = ImageDownloader() let urlRequest = URLRequest(url: url) downloader.download(urlRequest) { response in switch response.result { case .Success(let image): completionHandler(image, nil) case .Failure(let error): completionHandler(nil, error) } }

投稿2018/06/29 06:50

編集2018/06/29 08:21
hiro_n

総合スコア70

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

po_tato

2018/06/29 07:04

回答ありがとうございます。 「ImageDownloaderを使用すれば非同期で取得できる」とありますが、 そもそもAlamofireImageも非同期で取得できるものではないのでしょうか?
hiro_n

2018/06/29 07:26

ImageDownloaderを使うと、completionでresponseを受け取れるという意味でした。伝え方がよくなかったですね。
po_tato

2018/06/29 07:28

そういうことだったのですね!ありがとうございます!
po_tato

2018/06/29 07:39

今、質問本文に追記致しましたが、もともとAlamofireImageをそのように使用していたのですが、ここでデータの処理が終わり次第、何かの処理に移りたかったのですが、それができずに今回質問に至りました。私が追記したソース部分で完了したら処理するというようなことは可能だと思いますか?
fuzzball

2018/06/29 07:51

debugPrint以降の処理って完了後の処理でしょ?
po_tato

2018/06/29 08:03

ということはこのままでやりたいことは出来ている(最初から完了後の処理に中に記載しているから)ということでしょうか?
hiro_n

2018/06/29 08:22 編集

おおよそできてると思います。responseは受け取れているので、completionHandlerを定義してあげれば大丈夫です。画像データの処理の後に、次の処理を行うときはcompletionHandler内で実行すれば良さそうです。頑張ってください! 回答に参考サンプルを追記しました。
po_tato

2018/06/29 08:59

サンプルありがとうございます! これはImageDownloaderを使用されたものですよね? 私はAlamofireImageで頑張ってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問