web-dev-qa-db-ja.com

Swiftベースのプロジェクトに最新のSDWebImage APIを統合する方法は?

私はObjective CでSDWebImageを使用しましたが、それはうまくいきましたが、Swiftを学び、APIの最新バージョンを統合しようとしていますが、APIがObjectiveであるため、すべてのステップで立ち往生しています。 CとSwiftでAPIを使用するための言及されている手順はありません。ドキュメントを読んでブリッジヘッダーファイルを作成し、以下のように必要なファイルを含めました。

#ifndef MyProject_Bridging_Header_h
#define MyProject_Bridging_Header_h

#import <SDWebImage/UIImageView+WebCache.h>
#import "UIImageView+WebCache.h"

#endif

私はフレームワークも追加し、SDWebImageプロジェクトを説明されているようにアプリ内にドラッグしました here

私はこれで本当に苦労しています。助けてください!参考までに、エラーを示す画像を追加しました。enter image description here

11
Developer

動作するはずのコード例を次に示します。

let block: SDWebImageCompletionBlock! = {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType!, imageURL: NSURL!) -> Void in
    println(self)
}

let url = NSURL(string: "http://placehold.it/350x150")

self.imageView.sd_setImageWithURL(url, completed: block)

そしてあなたのブリッジヘッダファイルで:

#import "UIImageView+WebCache.h"

したがって、ブリッジングヘッダーファイルは機能するはずですが、ブリッジングヘッダーで問題が発生することがあり、このような場合は削除して再度追加するだけで、すべて正常に機能します。

24
Ghislaindj

最良のオプションは、SDWebImageフォルダーをプロジェクトにドラッグアンドドロップすることです。 「必要に応じてアイテムをコピーする」がチェックされていることを確認してください。

Obj C Bridging:File-> New-> Source-> Header File-> Name as AppName-Bridging-Headerを作成します。

以下を追加します。

        #ifndef AppName_AppName_Bridging_Header_h
        #define AppName_AppName_Bridging_Header_h

        #import <SDWebImage/UIImageView+WebCache.h>
        #import "UIImageView+WebCache.h"
        #endif

    or

 #import "UIImageView+WebCache.h"   

リファレンス: https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

注:ビルド設定、Swiftコンパイラ-コード生成で、Objective-Cブリッジヘッダーのビルド設定の下に、ブリッジヘッダーファイルへのパスがあることを確認してください。-同様のtestSD/testSD-Bridging- Header.hまたはtestSD-Bridging-Header.h(プロジェクトフォルダーを開き、ヘッダーファイルのパスを見つけます)

今、このコードで試してください:

let block: SDWebImageCompletionBlock! = {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType!, imageURL: NSURL!) -> Void in
    println(self)
}

let url = NSURL(string: "http://arrow_upward.com/350x150")
self.imageView.sd_setImageWithURL(url, completed: block)

UICollectionViewを使用してキャッシュイメージングを設定している場合は、次のコードを試してください。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = photoListCollectionView.dequeueReusableCellWithReuseIdentifier("scoutimagecellidentifier", forIndexPath: indexPath) as! ScoutImageCell

        //Loading image from server using SDWebImage library
        let thumbImageUrl  =   NSURL(string: self.photoPropertyArray[indexPath.row] as String)

        //Image Fetching is done in background GCD thread        

SDWebImageManager.sharedManager().downloadImageWithURL(thumbImageUrl, options: [],progress: nil, completed: {[weak self] (image, error, cached, finished, url) in

if let wSelf = self {

                //On Main Thread
                dispatch_async(dispatch_get_main_queue()){
                    cell.scoutimage.image = image
                    cell.photoloader.stopAnimating()
                }
            }
            })
        return cell
    }
3
A.G

Swift 3.0コード

sDWebImageをインポート

let url = URL.init(string:"https://vignette3.wikia.nocookie.net/zelda/images/b/b1/Link_%28SSB_3DS_%26_Wii_U%29.png")
imagelogo.sd_setImage(with: url , placeholderImage: nil)
1
Arjun Yadav