截取字符串在Swift中相比OC要复杂很多,主要原因可能还是OC的NSRange的创建方法中参数类型为int,而Swift却对类型要求很严格,int不能作为参数创建Range,这要使用String中的startIndex和endIndex,但问题又出来了,如果要有灵活的范围呢?在之前可以直接就用advance函数,现在的Swift没有这个函数了,要用到advancedBy和distanceTo. 以下代码是对于Range和advancedBy函数的使用: //截取子串 let str = "He…
Swift中的Ranges和Objective-C中的NSRange有很大的不同,我发现在处理Swift中Ranges相关的问题的时候,总是要花费比我想象的更多的时间.不过,现在回过头来看看,发现Swift中的Ranges的使用还是比较合理的,但是想要正确的使用Ranges真的需要一些特别的技巧. 看一个例子,下面这段代码展示的是截取以指定的字符开头和以指定的字符结尾的子字符串: ? 1 2 3 4 5 6 var str = "Hello, playground"    let ra…
在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中,可…
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在C++和ruby语言的错误处理中有一种final机制,发生在无论是否出现错误都会执行的情况.这时适合处理收尾或清理工作. 在Swift中同样存在一个defer语法,后面跟闭包可以完成类似的功能,只不过defer不仅仅可以用在错误处理中,它可以用在任何需要清理的情况: var isTrue = false func test(name:String)-…
前言 在Objective-c的世界中,一切对象都是指针.它是一种运行时语言,具体指针的对象类型将会在运行时,由系统分配.这样虽然自由,但是却并不安全. Swift世界就不一样了,Swift的世界很安全(至少大部分时候情况如此).我们不必为对象运行时的类型担忧,这是Swift为我们构筑的一层堡垒.但是在一些时候,这层堡垒也成为束缚我们行为的操作. 正文 Swift也为操作指针这种不安全行为提供了支持. MemoryLayout MemoryLayout是Swift 为结构体struct等一些需要…
1.UIButton的EdgeInsets UIButton的EdgeInsets方法,是用来设置title和image对于上左下右四个方向的偏移,但是很奇怪的是,刚开始只有Image,titile也设置了结果没显示出来,问题出现的很奇怪,也没找到什么原因,代码也没有错,莫名其妙的,换了一个图试了试,果然就好了:最后网上也找了原因,没有说明的,只是说这种现象的出现是因为"Button的width > titleLabel的width + image的width(图片原大小)" ,…
虽然现在swift语言已经发展到了2.0版了,但是相信很多学习iOS开发的童鞋仍对swift语言存在各种各样的疑问,今天小编将为大家详细介绍swift中的范围和区间,下面我们一起来看看吧. Ranges 在swift语言中,范围是用 Range 类型表达的,一个范围就是一个索引集合. 其中,值得注意的是Range在标准库中使用很频繁,特别是处在集合的上下文当中时.当我们查看 Range 定义时,范围和集合之间的紧密关系一目了然: struct Range<Element : ForwardInd…
Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [APPVENTURE]categories: [Swift 进阶]permalink: advanced-practical-enum-examples 原文链接=http://appventure.me/2015/10/17/advanced-practical-enum-examples/作者=Benedik…
项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发起网络请求,服务端返回JSON文本,然后客户端解析这个JSON文本,再把对应数据展现到页面上. 但在编程的时候,处理JSON是一件麻烦事.在不引入任何轮子的情况下,我们通常需要先把JSON转为Dictionary,然后还要记住每个数据对应的Key,用这个Key在Dictionary中取出对应的Val…
原文出处:Understanding Optionals in Swift 苹果新的Swift编程语言带来了一些新的技巧,能使软件开发比以往更方便.更安全.然而,一个很有力的特性Optional,在你第一次使用时可能会感到困惑.Optionals将会在编译阶段检查哪些值为nil.通过这种方式,你可以更好的保证应用程序交付在用户手里是可运行的.在Swift中,Optionals也提供了一些接口用来和遗留的Objective-C代码之间交互. 初试Optional 让我们在XCode中新建一个叫做s…
以下关键字关于引用传参.属性.修改成员变量.静态变量.索引和构造函数重载 读过The Swift Programming Language的人都能看得出,我上面的这几个说法全不是apple的习惯用语.之所以这么起题目是因为很多最近转到swift下,但原本又不是搞ios开发的人,并不习惯apple的说法.他们经常在查询他人博客的时候因为某些名词的表示方式不同,而把原本简单的问题搞得一头雾水.就像我在刚接触oc的时候,很奇怪message和protocol的说法一样,因为我的mother  prog…
swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面我们就介绍一个这个库的安装与使用. 一.安装包管理工具CocoaPods 由于国内容易被墙,速度也非常的慢,这里我们使用提供的源 http://ruby.taobao.org/ gem sources --remove https://rubygems.org/ gem sources –a htt…
Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体?正是因为它的使用范围受限,使得结构体在构建代码块 (blocks) 的时候非常灵活. 值类型和引用类型 结构体是值类型的,而类是引用类型的,这一行为上的细微区别造就了架构上的无限可能. 值类型的实例,不管是在赋值或是作为函数参数的时候,都是被复制的.数字,字符串,数组,字典,枚举,元组和结构体都是…
在第一部分中, 你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让 PhotoManager单例在读写照片时是线程安全的.除此之外,你用到dispatch_after来提示用户,优化了用户体验.还有,使用 dispatch_async异步执行CPU密集型任务,从而为视图控制器初始化过程减负. 如果你跟着教程做,现在可以从第一部分的示例工程继续.如果你没有完成第一部分或不想再用你的工程,可以下载第一部分的完成文件. 是时候进一…
尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispatch 是Apple所提供的在IOS和OS X上进行并发编程的库,而GCD正是它市场化的名字.GCD有如下优点: – GCD可以将计算复杂的任务…
在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等.比如两个字符串是否相等.而所谓的 相等 有着两层含义.一个是值相等,还有一个是引用相等.如果熟悉 Objective-C 开发的话,就会知道 Objective-C 为我们提供了一系列 isEqual: 方法来判断值相等,而 == 等于号用来判断引用相等. 我们来看一个 Objective-C 的例子就会更加明白了: NSArray *arr1 = @[@"cat",@"hat",@&qu…
Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API 会立即给实例分配"AnyObject"类型,用户只能想方设法去做类型匹配. 而这里将回顾 Swift 中的反射.镜像类型以及将它们结合起来的 MirrorType 协议. MirrorType 反射的切入点为「reflect」函数,「reflect」函数可将任何类型作为其单参数并返回一个…
在Objective-C中,我们经常使用预处理指令来帮助我们根据不同的平台执行不同的代码,以让我们的代码支持不同的平台,如: 1 2 3 4 5 6 7 8 9 #if TARGET_OS_IPHONE       #define MAS_VIEW UIView                #elif TARGET_OS_MAC       #define MAS_VIEW NSView   #endif 在swift中,由于对C语言支持没有Objective-C来得那么友好(暂时不知swif…
Core Image是一个可以让你轻松使用图形过虑器的强力框架.在这里你几乎可以获得所有不同种类的效果,比如修改图像饱和度,色彩范围,亮度等.它甚至也可以利用CPU或者GPU来处理图像数据并且它的速度很快,快到可以对视频进行实时处理.   Core Image过滤器也可以把图像或者视频的多重效果同时串在一起.多重的过滤器会被合并为一个单独的过滤器来应用到图像中.相对于同时处理多个不同效果来说这样做更有效率.   在本教程中,你将会获得关于CoreImage的实践经验.你将会学会一些不同的效果,并…
设计模式(Design Pattern)是 对软件设计中普遍存在的各种问题,所提出的解决方案.这个术语是由埃里希·伽玛等人(Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides这四人提出的.也被称为:Gang of Four,GOF,四人帮)在1990年代从建筑设计领域引入到计算机科学的. 设计模式并不能直接用于完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案. 以上描述摘自维基百科.设计模式出现于1990年代,那时主要的编…
在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的.一个状态管理的例子大家都很熟悉,那就是单例.使用Swift时,有许多方法实现单例,这是个麻烦事,因为我们不知道哪个最合适.这里我们来回顾一下单例的历史,看一看在Swift中如何正确地实现单例. 如果你想直接看看Swift中单例的正确实现方式,直接跳到帖子最后即可. 往事回忆之ObjC单例 Swift是Objective-C的一种自然演变,它用如下的方式实现单例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16…
一个类能够继承(inherit)还有一个类的方法(methods),属性(property)和其他特性.当一个类继承其他类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass).在 Swift 中,继承是区分「类」与其他类型的一个基本特征. 在 Swift 中,类能够调用和訪问超类的方法,属性和附属脚本(subscripts),而且能够重写(override)这些方法,属性和附属脚本来优化或改动它们的行为.Swift 会检查你的重写定义在超类中是否有匹配的定义,以此…
Swift 中 String 取下标及性能问题 取下标 String String 用 String.Index 取下标(subscript)得到 Character,String.Index 要从 String 中获取 let greeting = "Guten Tag!" greeting[greeting.startIndex] // Character "G" greeting[greeting.index(before: greeting.endIndex…
我们知道在Swift中String和NSString是可以互相转换使用的-额-应该是在绝大数情况下可以互相转换使用.在某些情况下可能还有一丝丝略微的差别:比如在涉及到处理字符串中字符索引的时候. 我们首先来看一下NSString的字符串替换功能: let string = "ABCDE" let range = Range(uncheckedBounds: (1,4)) let nsRange = NSRange(range) let str:NSString = NSString(s…
在Swift中我们拥有强大高级逻辑抽象能力的同时,低级底层操作被刻意的限制了.但是有些情况下我们仍然想做一些在C语言中的hack工作,下面本猫就带大家看一看如何做这样的事. hacking is happy!!! ;] 如标题所说,现在我有一个Int变量x,我想取得它的地址,然后转换为Char类型的地址,然后将改地址的内容+1,如果用C语言来表示就是: int x = 121,*pi = &x char *pc = (char *)pi *pc += 1 用Swift来写有2个问题,一是你没法直…
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在swift中,如果方法的最后一个参数是一个闭包类型,则可以省略该参数,直接在函数后面跟一个闭包,比如: func test(count:Int,(Int)->Bool){ //... } 可以这么调用: test(11){(x)->Bool in //... } 但是有些情况不能省略括号,比如for语句中: for dinosaur in dino…
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在早期的Swift中在子类里只能调用超类的designated初始化器,这是Swift早期版本的一个限制,所以譬如完成CCSprite子类的init工作,我们就得多写一些代码: init(type:FallingObjectType){ self.type = type var imageName:String? = nil if type == .G…
原文:http://www.cocoachina.com/applenews/devnews/2014/0623/8923.html Swift 事实上是支持反射的.只是功能略弱. 本文介绍主要的反射使用方法和相关类型.   MetaType 和 Type 语法 The metatype of a class, structure, or enumeration type is the name of that type followed by .Type. The metatype of a…
这几个概念让人很迷惑,看了很多帖子,终于搞明白了,简单总结: Any 和 AnyObject 是 Swift 中两个妥协的产物.什么意思呢,oc中有个id关键字,表示任何对象,oc和swift混编的时候拿什么对应id呢?就发明出来了AnyObject.但是!oc中的NSString,NSArray等都是class,但是在swift中String,Array都是struct,这个怎么办呢,混编的时候NSString等类型对应的id就不能用AnyObject了,为了填坑,又搞出来个Any,表示任意类…
Swift 是自动管理内存的,这也就是说,我们不再需要操心内存的申请和分配. 当我们通过初始化创建一个对象时,Swift 会替我们管理和分配内存.而释放的原则遵循了自动引用计数 (ARC) 的规则:当一个对象没有引用的时候,其内存将会被自动回收. 这套机制从很大程度上简化了我们的编码,我们只需要保证在合适的时候将引用置空 (比如超过作用域,或者手动设为 nil 等),就可以确保内存使用不出现问题. 但是,所有的自动引用计数机制都有一个从理论上无法绕过的限制,那就是循环引用 (retain cyc…