swift 中delegate的使用】的更多相关文章

今天写了delegate,遇到以下问题: 这里protocol的写法有问题,如果delegate指向一个实现了某个协议对象的引用,在oc里是这样写delegate的类型 id<protocol>,而在swift中,没有这种写法,应该像上面那样直接写出协议名,因此,协议声明应该这样写: protocol MyPickerViewDelegate: NSObjectProtocol { func pickerConfirm(content:String) } 这也是因为,除了class 外,str…
swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面我们就介绍一个这个库的安装与使用. 一.安装包管理工具CocoaPods 由于国内容易被墙,速度也非常的慢,这里我们使用提供的源 http://ruby.taobao.org/ gem sources --remove https://rubygems.org/ gem sources –a htt…
什么时候用通知,什么时候用代理,什么时候用block 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了 代理 : 父子关系,监听的方法较多的时候使用 block : 父子关系,监听的方法较少的时候使用 Swift中的代理 swift中代理的实现 定义swift中代理的协议 // swift 中的代理必须继承自NSObjectProtocol protocol VisitorViewDelegate : NSObjectPro…
一.有关回调 我们知道,执行函数的时候,一般都有return作为返回参数了,那有return了为什么还要回调呢? 回调是为了实现异步的返回,在某些特殊的情况下,比如你执行的函数是一个长时间运行的函数,并不能直接返回给你结果,为了不影响源程序其他步骤的执行,你得继续执行下去,等那边产生结果了再“主动告诉你”结果是什么. 其原理不外乎:A调用B中函数,传递参数和自身指针,B执行完成再通过传递过来的指针重新调用A中函数. 在iOS开发中,实现回调的方式有:Delegate和Block.前者用变量指针实…
1. 应该充分利用swfit的新特性 比如如果按照oc里的习惯,调用一个delegate中都optional函数应该这样写 if delegate != nil && delegate!.respondsToSelector("downloadProgress:progress:"){ delegate!.downloadProgress!(self, progress: totalProgress) } 先检查是不是nil,再检查是否实现了方法,而swift应该这样写…
即使在 Swift APP 中没有一行 Object-c 的代码,每个 APP 也都会在 Object-c runtime 中运行,为动态任务分发和运行时对象关联开启了一个世界.更确切地说,可能在仅使用 Swift 库的时候只运行 Swift runtime.但是使用 Objective-C runtime 这么长时间,我们也应该让他充分发挥其作用. 下面我们将以 Swift 的视角来观察关联对象(associated objects])和方法交叉(method swizzling) 这两个在运…
Swift中的注释 使用"// MARK:- 注释内容",对属性或方法进行注释 使用"///注释内容"对属性或方法提供调用说明的注释 使用extension对同一个类中的相关方法进行划分. extension类似于OC中的category,也是只能扩充方法,不能扩充属性 使用代码添加UITableView 使用懒加载属性,声明一个tableView lazy var talbeView : UITableView = UITableView() 将tableView…
在oc中为了增强已有类的功能,我们经常使用分类.使用分类,我们可以在不破坏原有类的结构的前提下,对原有类进行模块化的扩展. 但是在swift中没有分类这种写法了.相对应的是swift中只有扩展(Extensions). 下面是swift中扩展(Extensions)的说明 扩展就是向一个已有的类.结构体.枚举类型或者协议类型添加新功能(functionality).这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模).扩展和 Objective-C 中的分类(categories)…
Cocoa 开发中接口-委托 (protocol-delegate) 模式是一种常用的设计模式,它贯穿于整个 Cocoa 框架中,为代码之间的关系清理和解耦合做出了不可磨灭的贡献. 在 ARC 中,对于一般的 delegate,我们会在声明中将其指定为 weak,在这个 delegate 实际的对象被释放的时候,会被重置回 nil.这可以保证即使 delegate 已经不存在时,我们也不会由于访问到已被回收的内存而导致崩溃.ARC 的这个特性杜绝了 Cocoa 开发中一种非常常见的崩溃错误,说是…
我最近在忙着回归到过去测试代码的老路子,使用KIF和XCTest框架,这样会使得iOS中的测试变得简单.当我开始捣鼓KIF的时候,我用Swift写的应用出了点小问题,不过最终还是很机智的搞定了.在我写Swift的时候我还发现了不少Swift独有的模式,这是个令我相当愉快的事,所以我们可以拿来分享分享. 这里我用的示例Demo是自己开发的Seinfeld Quotes应用,现在我只是简单的测试添加条目的功能,下图是用KIF进行的测试: Swift的KIF设置 设置KIF的话只要照着KIF READ…
Core Image是一个可以让你轻松使用图形过虑器的强力框架.在这里你几乎可以获得所有不同种类的效果,比如修改图像饱和度,色彩范围,亮度等.它甚至也可以利用CPU或者GPU来处理图像数据并且它的速度很快,快到可以对视频进行实时处理.   Core Image过滤器也可以把图像或者视频的多重效果同时串在一起.多重的过滤器会被合并为一个单独的过滤器来应用到图像中.相对于同时处理多个不同效果来说这样做更有效率.   在本教程中,你将会获得关于CoreImage的实践经验.你将会学会一些不同的效果,并…
光阴似箭,日月如梭,转眼间学习的旅途已经过了一大半了,忘着自己所敲过的成批的代码,看着自己付出和努力,默默地为自己这几个月的奋斗感到欣慰,不论学习的路途再怎么的艰辛,但是自己还是坚持过来了,回想着以往的自己,似乎还从没有这么的坚持过,也没有这么的认真对待过,所以这么艰难的路自己都走过来了,后面的我相信一定是绚丽的明天和辉煌的未来,也许有些人说当个程序员真的好苦,但是我并不这么认为,因为这是我想做的,也是我所向往的,更是我所选择的道路,做“你”所想,实现我们共同的目标!!!! 在这看似漫长而又短暂…
前言: 重力学这个名词不论在哪个行业领域听起来似乎都非常高大上. 那么在Swift中的重力学是什么呢?那就是将我们移动端屏幕上毫无生命力的东西也置于万有引力中.使它们能够展现出好像真的因为引力而向下坠落以及碰到物体后自然的弹开的效果. 要想做到这一点,我们得须要两个利器:UIKit Dynamics和Motion Effects. 一.简介 1.UIKit Dynamics是从iOS 7開始引入的一种新技术,隶属于UIKit框架的物理引擎.能模拟和仿真现实生活中的物理现象它能够让我们在程序中对界…
Swift中页面跳转与传值: 1.简单方式 首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法. 1.通过在storyboard中拉button控件建立segue跳转. 2.通过presentViewController方法进行界面跳转. 这里需要注意presentViewController方法适用于xib与storyboard两种方法,但是当使用storyboard直接调用该方法时,ios模拟器会转入一个黑屏界面…
1.0 在Swift中分有值类型和引用类型 Int .String . 结构体和枚举都属于值类型, 将值类型传递给方法是,将在内存中创建其副本,并传递这个副本:这样我们就可以随心所欲修改它,而不用担心这会修改传入的原始值. 传递引用类型时不会复制它,而将其地址提供给可能使用他们的函数或方法.闭包以及从类实例化得到的对象都属于引用类型.将闭包或者对象传递给方法时,不会创建其副本,而是传递引用(内存地址).由于传递引用类型时不会创建其副本,因此需要特别小心,确保在正确的时间妥善地释放它们,过早的释放…
Swift 是自动管理内存的,这也就是说,我们不再需要操心内存的申请和分配. 当我们通过初始化创建一个对象时,Swift 会替我们管理和分配内存.而释放的原则遵循了自动引用计数 (ARC) 的规则:当一个对象没有引用的时候,其内存将会被自动回收. 这套机制从很大程度上简化了我们的编码,我们只需要保证在合适的时候将引用置空 (比如超过作用域,或者手动设为 nil 等),就可以确保内存使用不出现问题. 但是,所有的自动引用计数机制都有一个从理论上无法绕过的限制,那就是循环引用 (retain cyc…
原文地址:http://blog.callmewhy.com/2014/10/08/uialertcontroller-swift-closures-enum/ 在 iOS8 的 SDK 中, UIKit 框架里两个经常使用的 API 有了比較大的修改.UIActionSheet 和 UIAlertView 都被 UIAlertController 替换了. 在 iOS8 里,假设你想要弹出消息,你应该使用 UIAlertController 而不是那两个不建议使用的类了. ActionShee…
关于 swift 中的open ,public ,fileprivate,private, internal的区别 以下按照修饰关键字的访问约束范围 从约束的限定范围大到小的排序进行说明 open,public,fileprivate,private,internal 这几个修饰词的作用是用于修饰访问级别的. open,public 对应的级别是该模块或者是引用了该模块的模块可以访问 即 a belong to A , B import A 这两种情况都可以对 a进行访问 public: 类用p…
项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON文本,然后客户端解析这个JSON文本,再把对应数据展现到页面上. 但在编程的时候,处理JSON是一件麻烦事.在不引入任何轮子的情况下,我们通常需要先把JSON转为Dictionary,然后还要记住每个数据对应的Key,用这个Key在Dictionary中取出对应的Val…
干货之前:补充一下可选链(optional chain) class A { var p: B? } class B { var p: C? } class C { func cm() -> String { print("cm") return "abc" } } let insa = A() let insb = B() let insc = C() insa.p = insb //insa.p = nil insb.p = insc let r = in…
在写Swift的单例方法之前可以温习一下Objective-C中单例的写法: + (instancetype)sharedSingleton{ static id instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[self alloc] init]; }); return instance; } 首先可以考虑仿照OC中的写法写一个. 因此Swift中的一种写法可以如下: cl…
原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你第一次使用时可能会感到困惑.Optionals将会在编译阶段检查哪些值为nil.通过这种方式,你可以更好的保证应用程序交付在用户手里是可运行的.在Swift中,Optionals也提供了一些接口用来和遗留的Objective-C代码之间交互. 初试Optional 让我们在XCode中新建一个叫做s…
有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac.非也,非也.如果你想了解或者初步学习Swift语言的话,你可以登录这个网站:http://swiftstub.com/ .该网站可以在线运行出代码结果,也可以说这是一个在线的Playground.你可以实时观察你代码的运行结果.如果你没有Mac笔记本,那么你只需打开你的浏览器,然后输入上述网址,就可以搞搞Swift这门语言了,灰常好用的呢.下方的截图就是该网址打开的截图. 上面如果算是工具性的网站的话,…
在swift中已经弱化了指针的使用,可以这么使用 let s: NSRange = NSMakeRange(, ) let at = UnsafeMutablePointer<NSRange>.alloc() at .memory = s let b = NSMakeRange(, ) at.memory = b print(at.memory) 创建一个pointer之后呢,这一通过.memory来进行赋值操作,,pointer本身是一个地址…
在swift中关于数据类型的转换,如果参数是可选类型? 那么打印或者转换的结果 会带有Optional 字样,,…
在swift中Range有两种用法 1.把字符串转换成NSString来使用 //这里是把swift的字符换转换成了nsstring 使用 let str :NSString = text.string as NSString self.showMessage("tap :" + str.substringWithRange(range)) 2 .使用swift自身的Range创建 //这里使用swift自带的range来做, //在此说明下,,swift中的Range不同于oc中,可…
前言 首先所有的Model还是使用oc来写——看到这一句是不是想关网页了- - #,在swift里面直接写一直报错所以就将就用oc来写了,这里主要是分享一下搭配Alamofire使用的经验. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 这里不讨论JSONModel和Alamofire这两个项目,直接上代码 BaseModel.h  ) }                 …
Swift中的willSet与didSet 周银辉 在Swift语言中用了willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化 无需说太多,看看下面的代码你就能很快明白的 import Foundation class People : NSObject { //普通属性 var firstName:String = "" var lastName:String = "" var nickName:String = "" /…
以下关键字关于引用传参.属性.修改成员变量.静态变量.索引和构造函数重载 读过The Swift Programming Language的人都能看得出,我上面的这几个说法全不是apple的习惯用语.之所以这么起题目是因为很多最近转到swift下,但原本又不是搞ios开发的人,并不习惯apple的说法.他们经常在查询他人博客的时候因为某些名词的表示方式不同,而把原本简单的问题搞得一头雾水.就像我在刚接触oc的时候,很奇怪message和protocol的说法一样,因为我的mother  prog…
一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包(Closure)函数.在我个人看来,两者并没有什么太大不同,定义和实现方式差不多,只不过是名称不一样罢了.由于开发用的比较多,所以我就针对OC和Swift分别写一下他们的传值方式,加深印象. 二.需求 定义两个控制器分别为FirstViewController和SecondViewControll…