iOS开发——保存图片到相册&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 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-08-24 04:05:55

iOS开发——保存图片到相册&Swift+OC篇的相关文章

iOS开发入门——17条 Swift 最佳实践规范(下)

文章来源:http://www.zretc.com/technologyDetail/433.html 承接上文:iOS开发入门--17条 Swift 最佳实践规范(上) 9.单例(Singletons) 在Swift中单例是很简单的: class ControversyManager { static let sharedInstance = ControversyManager()} Swift 的 runtime 会保证单例的创建并且采用线程安全的方式访问. 单例通常只需要访问"share

IOS UIImagePickerController 保存图片到 相册

// 异步下载图片 dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); dispatch_group_t group =dispatch_group_create(); dispatch_group_async(group, queue, ^{ NSData *data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:ima

iOS开发范例实战宝典(进阶篇)——互动出版网

这篇是计算机类的优质推荐>>>><iOS开发范例实战宝典(进阶篇)> 以最新的IOS 8为版本编写,内容覆盖了IOS开发的方方面面,通过大量实例提升实战技能,并对书中的重点和难点进行了专门分析. 编辑推荐 *以最新的iOS 8为版本编写,内容覆盖了iOS开发的方方面面* *通过200多个实例提升实战技能,并对书中的重点和难点进行了专门分析 *注重实战:详细讲解了117个iOS开发经典实例,提高实战开发水平 *内容全面:全面介绍了iOS开发中最为常见的14类界面模块 *由

iOS开发范例实战宝典(基础篇)——互动出版网

这篇是计算机类的优质推荐>>>><iOS开发范例实战宝典(基础篇)> 以最新的IOS 8为版本编写,内容覆盖了IOS开发的方方面面,通过大量实例提升实战技能,并对书中的重点和难点进行了专门分析. 编辑推荐 *以最新的iOS 8为版本编写,内容覆盖了iOS开发的方方面面* *通过200多个实例提升实战技能,并对书中的重点和难点进行了专门分析 *注重实战:详细讲解了117个iOS开发经典实例,提高实战开发水平 *内容全面:全面介绍了iOS开发中最为常见的14类界面模块 *由

iOS开发——MVC详解&amp;Swift+OC

MVC 设计模式 这两天认真研究了一下MVC设计模式,在iOS开发中这个算是重点中的重点了,如果对MVC模式不理解或者说不会用,那么你iOS肯定学不好,或者写不出好的东西,当然本人目前也在学习中,不过既然能看到这篇文档,说明你已经开始着手学习并且想深入研究它了,个人也是研究很久才搞懂,就写下来希望对各位有用,也能方便自己以后开发中查看,好了废话不多说,下面就来详细介绍一下MVC,并且用实例验证一下在项目开发中怎么去使用它. 相信你对 MVC 设计模式 并不陌生,只是不能完全理解其中的含义或者不能

iOS开发入门——17条 Swift 最佳实践规范(上)

文章来源:http://www.zretc.com/technologyDetail/432.html 前言 这篇IOS开发入门文章是我根据在 SwiftGraphics 工作时的一系列笔记整理出来的.文中大多数建议是经过深思熟虑的,但仍可以有其他类似的解决方法.因此,如果其他方案是有意义的,这些方案会被添加上去. 这个最佳实践不是强加或者推荐 Swift 在程序.面向对象或者函数风格上的应用.更重要的是,这里要讲述的是务实的方法.如有需要的话,某些建议可能会集中在面向对象或者实用的解决方法.

iOS开发 - 多线程实现方案之Pthread篇

pthread基础 pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix.Linux.Windows等系统,跨平台.可移植,使用难度大,C语言框架,线程生命周期由程序员管理,百度百科上有详细的介绍,去查看,由于iOS开发几乎用不到,以下就简单运用pthread开启一个子线程,用来处理耗时操作 pthread创建子线程步骤 1.导入头文件 #import <pthread.h> 2.pthread创建子线程 - (void)viewDidLoad { [supe

iOS开发:深入理解GCD 第一篇

最近把其他书籍都放下了,主要是在研究GCD.如果是为了工作,以我以前所学的GCD.NSOperation等知识已经足够用了,但学习并不仅仅知识满足于用它,要知其然.并且知其所以然,这样才可以不断的提高自身技术水平. 本文主要参考http://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 和 <iOS与OS X 多线程和内存管理>,以及其他一些杂七杂八的书籍或者博客. GCD已经面世很久了,基于GCD面向对象

iOS开发中常用的轮子 第一篇

为避免重复造轮子,很多效果和功能都可以从github上找到.清点以前的项目,整理出了很多用过的开源代码,每天奉送10个. 第一篇  同色的代表是实现了同个功能,按自己需求挑选一个 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基·梅隆大学, 开源了许多牛逼的项目, 这个便是其中之一, AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交