在swift中保存图片到相册

本来是没有必要把这么小的一个知识点写到博客中的,但是,由于OC中的一些语法在swift中实现的时候有些特别,所以单独写下来到博客中,希望能够帮助到有需要的同学。

1.OC中的写法

在OC中,我们需要保存图片到相册需要调用这个方法:

void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);

想来大家也都看过这个方法的头文件,在头文件中有这样一段话

// Adds a photo to the saved photos album.  The optional completionSelector should have the form:
//  - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;

意思是:想要将一张照片保存到相册中,这个可选的完成方法需要按照下面那个方法的格式来定义。
所以,我们在OC中通常都是直接将这个方法拷贝出来,直接实现这个方法,举个栗子:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UIImageWriteToSavedPhotosAlbum(self.iconView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

    if (error) {
        NSLog(@"保存出错");
        return;
    }

    NSLog(@"保存成功");
}

在上面这个栗子中,我通过手指触摸事件,将事先定义好的iconView中的图像保存到相册中。

而同样一个栗子,在Swift中应该怎么样实现呢?

2.swift中的写法

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

    UIImageWriteToSavedPhotosAlbum(iconView.image, self, "image:didFinishSavingWithError:contextInfo:", nil)

}

    func image(image: UIImage, didFinishSavingWithError: NSError?, contextInfo: AnyObject) {
    println("---")

    if didFinishSavingWithError != nil {
        println("错误")
        return
    }
    println("OK")
}

同样的栗子,swift中的实现如上,在swift中,我们跳到头文件会发现是这样的,

// Adds a photo to the saved photos album.  The optional completionSelector should have the form:
//  - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;

还是OC中那一套,苹果并没有帮我们写好swift下的代码格式应该怎么写,所以很多人对此应该怎么使用会产生许多的疑惑,其实,就是像上面那样,将参数一一对应,以swift中函数的写法写出来就可以了。
另外补充一点小知识点:
上面的那个方法我们还可以这么写,

    // 提示:参数 空格 参数别名: 类型
func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo: AnyObject) {
    println("---")

//        if didFinishSavingWithError != nil {
    if error != nil {
        println("错误")
        return
    }
    println("OK")
}

类似这样的格式:(参数 参数别名: 类型)didFinishSavingWithError error: NSError?
在外部调用时,显示的是didFinishSavingWithError这个参数名
而在内部使用时,显示的是error这个参数别名,方便我们的使用,也更加类似OC中的写法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值