Swift项目中的Cloudinary SDK

Ami*_*miH 4 objective-c cloudinary swift xcode6

有没有办法在Swift文件中使用Obj-C SDK?我试图将cloudinary SDK添加到我的项目中.我找到了一种方法将libcloudinary.a添加到我的项目框架中,但它无法正常工作.

更新:Cloudinary刚刚发布了用Swift语言编写的新SDK:https://github.com/cloudinary/cloudinary_ios(Swift 3和Swift 2.3在不同的早午餐)

abi*_*nop 6

这些对我有用:

  1. 创建或附加到Podfile文件: pod "Cloudinary"
  2. 运行pod install然后打开工作区文件,而不是项目.
  3. 将Obj-C文件添加到项目中(http://cl.ly/image/272V1Z2Q3g0e),当被问及是否添加Objective-C桥接头时
  4. 在此文件中添加 #import "Cloudinary/Cloudinary.h"
  5. 您现在可以使用Cloudinary API.以下是一些要上传的代码:

    let cloudinary_url = "cloudinary://API_KEY:API_SECRET@CLOUD_NAME"
    var uploader:CLUploader = CLUploader(cloudinary, delegate: self)
    uploader.upload(UIImageJPEGRepresentation(new_image, 0.8), options: ["format":"jpg"], withCompletion: { ([NSObject : AnyObject]!, errorResult:String!, code:Int, context:AnyObject!) -> Void in
    
    }, andProgress: { (p1:Int, p2:Int, p3:Int, p4:AnyObject!) -> Void in
    
    })
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

是的你可以.

首先,您需要按照此处的说明设置您的xcode项目.然后,您需要创建Swift文档中定义的桥接头文件.

#ifndef Fun_Bridging_Header_h
#define Fun_Bridging_Header_h

#import "Cloudinary.h"

#endif
Run Code Online (Sandbox Code Playgroud)

不幸的是,他们的objective-c API与Swift无法完全互操作,即他们的上传API(CLUploader).

我必须做的就是在Objective-c中为它创建一个工厂类

接口(CloudinaryFactory.h)

#ifndef Fun_Wrappy_h
#define Fun_Wrappy_h
#import "Cloudinary.h"

@interface CloudinaryFactory : NSObject  
+ (CLUploader*)create:(CLCloudinary*)cloudinary delegate:(id <CLUploaderDelegate> )delegate;
@end

#endif 
Run Code Online (Sandbox Code Playgroud)

实现(CloudinaryFactory.m):

#import "CloudinaryFactory.h"

@implementation CloudinaryFactory  

+ (CLUploader*)create:(CLCloudinary*)cloudinary delegate:(id <CLUploaderDelegate> )delegate
{
    return [[CLUploader alloc] init:cloudinary delegate:delegate];
}

@end
Run Code Online (Sandbox Code Playgroud)

和更新的桥接文件

#ifndef Fun_Bridging_Header_h
#define Fun_Bridging_Header_h

#import "CloudinaryFactory.h"

#endif
Run Code Online (Sandbox Code Playgroud)

现在,使用它:

 var image:UIImage? //todo: i'm assuming you would set this somewhere
 @IBAction func uploadGarment(sender: AnyObject) {
    let clouder = CLCloudinary(url: "cloudinary://your:cloudinary@url")

    let forUpload = UIImagePNGRepresentation(image) as NSData
    let uploader = CloudinaryFactory.create(clouder, delegate: self)

    uploader.upload(forUpload, options: ["public_id":"testo"])   

}
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助!更多,这是相关的博客文章