在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中的写法。

时间: 2024-10-21 16:24:09

在swift中保存图片到相册的相关文章

iOS开发——实用篇Swift篇&amp;保存图片到相册

保存图片到相册 最近在深入的学习关于swift相关技术,虽然海做不出什么好的东西,但是感觉收获不少,相信总有一样能用到,所以就总结了一下,希望大家喜欢! 1.OC中的写法 在OC中,我们需要保存图片到相册需要调用这个方法:  1 void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);  想来大家也都看过这个方法的头文件,

iOS开发——保存图片到相册&amp;Swift+OC篇

保存图片到相册 1.OC中的写法 在OC中,我们需要保存图片到相册需要调用这个方法: void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo); 想来大家也都看过这个方法的头文件,在头文件中有这样一段话 // Adds a photo to the saved photos album. The optional compl

iOS 保存图片到相册

保存图片到相册 - (IBAction)save_clcik:(UIButton *)sender { if (self.imgView.image==nil) { [SVProgressHUD showWithStatus:@"正在努力加载中..."]; return; } // 将图片写入到相册() UIImageWriteToSavedPhotosAlbum(self.imgView.image, self, @selector(image:didFinishSavingWith

在Swift中应用Grand Central Dispatch(上)

本文翻译自raywenderlich,原文:Grand Central Dispatch Tutorial for Swift: Part 1/2尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispa

如何学习新的框架(保存图片到相册)

一.点击查看大图 1.点击图片或按钮(点击查看大图按钮),modal出来一个控制器,显示大图片 2.怎么处理能让点击图片就能查看大图? 两种方法:1.给图片添加点按手势 2.给图片所在的view上添加 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2.1 添加点按手势 优点:适用于任何场景下,不受限制 缺点:代码量大 2.2 给图片所在view添加touchesEnded:方法 优点:能快

在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客

尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispatch 是Apple所提供的在IOS和OS X上进行并发编程的库,而GCD正是它市场化的名字.GCD有如下优点: – GCD可以将计算复杂的任务

IOS 保存图片至相册

IOS 保存图片至相册 应用中有时我们会有保存图片的需求,如利用UIImagePickerController用IOS设备内置的相机拍照,或是有时我们在应用程序中利用UIKit的 UIGraphicsBeginImageContext,UIGraphicsEndImageContext,UIGraphicsGetImageFromCurrentImageContext方法创建一张图像需要进行保存. IOS的UIKit Framework提供了UIImageWriteToSavedPhotosAl

iOS保存图片到相册崩溃

项目迭代开发的过程中,有用户反映保存图片到相册崩溃,最终自己测试出,在iOS11以下的手机正常保存,而iOS11之后的手机则会出现反映的问题.打印错误信息如下: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryAddUsageDescri

Swift 中的Range和NSRange不同

Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间.不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧. 看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串: ? 1 2 3 4 5 6 var str = "Hello, playground"   let ran