在swift中保存图片到相册

前端之家收集整理的这篇文章主要介绍了在swift中保存图片到相册前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. 本来是没有必要把这么小的一个知识点写到博客中的,但是,由于OC中的一些语法在swift中实现的时候有些特别,所以单独写下来到博客中,希望能够帮助到有需要的同学。

1.OC中的写法

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

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

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

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

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

  1. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  2.  
  3. UIImageWriteToSavedPhotosAlbum(self.iconView.image,self,@selector(image:didFinishSavingWithError:contextInfo:),nil);
  4.  
  5. }
  6. - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
  7.  
  8. if (error) {
  9. NSLog(@"保存出错");
  10. return;
  11. }
  12.  
  13. NSLog(@"保存成功");
  14. }

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

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

2.swift中的写法

  1. override func touchesBegan(touches: Set<NSObject>,withEvent event: UIEvent) {
  2.  
  3. UIImageWriteToSavedPhotosAlbum(iconView.image,"image:didFinishSavingWithError:contextInfo:",nil)
  4.  
  5. }
  6.  
  7. func image(image: UIImage,didFinishSavingWithError: NSError?,contextInfo: AnyObject) {
  8. println("---")
  9.  
  10. if didFinishSavingWithError != nil {
  11. println("错误")
  12. return
  13. }
  14. println("OK")
  15. }

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

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

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

  1. // 提示:参数 空格 参数别名: 类型
  2. func image(image: UIImage,didFinishSavingWithError error: NSError?,contextInfo: AnyObject) {
  3. println("---")
  4.  
  5. // if didFinishSavingWithError != nil {
  6. if error != nil {
  7. println("错误")
  8. return
  9. }
  10. println("OK")
  11. }

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

猜你在找的Swift相关文章