随笔分类 -  swift

摘要:现在的Swift虽然在反射方面相比Objective-C要弱得多,但还是存在一些和反射相关的内容的。 可以通过一个Mirror来获取某元素的一些信息,比如对象的所有属性。 打印结果: 也可以用dump打印其镜像信息: 阅读全文
posted @ 2018-02-07 16:17 紫洁 阅读(249) 评论(0) 推荐(0)
摘要:Swift标准库有一组lazy方法,或者说是计算属性,可以把map和filter这类接受闭包运行的方法实现延时运行。对于运行代价很大的情况,它可以起到不小的性能提升作用。 本来不使用lazy是这样的: 打印结果为: 在没有lazy时,map会按顺序直接运行闭包。 下面先取其lazy结果,后再map: 阅读全文
posted @ 2018-02-07 16:13 紫洁 阅读(442) 评论(0) 推荐(0)
摘要:// 本文内容来自慕课网 玩儿转Swift 1 协议中可以定义属性 (1)属性不可以有默认值 (2)必须设置是“get”还是“get set”,注意:get与set之间是没有逗号的 (3)即使属性只有get,没有set,也不可以将属性设置为let,必须设置为var 2 协议中可以定义方法 (1)方法 阅读全文
posted @ 2017-03-21 19:07 紫洁 阅读(7351) 评论(1) 推荐(0)
摘要:1. 类、结构体、枚举都是可以扩展的。 (1)可以在扩展中添加方法; (2)可以在扩展中添加属性 这个属性只能是计算型属性,不可以是存储型属性; (3)可以在扩展中添加构造函数 这个构造函数只能是便利构造函数,不可以是指定构造函数。 以上可以看到,代码的基石还是在原来的类(结构体、枚举)中的,扩展只 阅读全文
posted @ 2017-03-21 16:38 紫洁 阅读(488) 评论(0) 推荐(0)
摘要:1 重载: (1)函数名相同,参数名、参数个数、参数类型不同 (2)函数重载是面向对象程序设计语言的重要标志 (3)OC不支持重载,Swift支持重载 2 重写 (1)也叫覆盖,指在自类中定义一个与父类中方法同名同参数列表的方法 (2)重写是子类的方法覆盖父类的方法,要求方法名和参数都相同 (3)因 阅读全文
posted @ 2017-03-20 21:55 紫洁 阅读(322) 评论(0) 推荐(0)
摘要:(1)class只能用于类,static既可以用于类,还可以用于结构体、枚举 (2)class修饰的方法可以被继承,static修饰的方法不能够被继承 (3)类方法和实例方法的方法名可以相同 阅读全文
posted @ 2017-03-20 21:43 紫洁 阅读(616) 评论(0) 推荐(0)
摘要:1. 现有一个向量,我们重载它的“+”、“-”、“*”、“+=”运算符。 注意: “=”是不可以进行重载的。 2. 重载比较运算符 3 自定义运算符 (1)对向量定义一个“+++”运算符,类似Int中的“++”运算符 (2) 自定义一个中间运算符 infix 阅读全文
posted @ 2017-03-20 19:00 紫洁 阅读(2702) 评论(0) 推荐(0)
摘要:通常情况下,我们在使用数组(Array)、字典(Dictionary)时,都会使用下标。其实,在swift中,我们可以给类、结构体、枚举等自定义下标。 1 基本使用 我们在结构体中定义了一个subscript,并且这个subscript类似于一个方法,看上去它的类型为 Int -> Double? 阅读全文
posted @ 2017-03-20 18:02 紫洁 阅读(1699) 评论(0) 推荐(0)
摘要:1 初始化函数的两段式构造 (1)第一段:基本构造 为子类属性及父类属性赋值 (I)父类属性只能通过父类的初始化函数赋值 (II)应该先给子类属性赋值,再调用super.init()方法对父类属性赋值 (2)第二段:进一步完善 调用super.init()方法后,才可以使用self进行其他的操作 2 阅读全文
posted @ 2017-03-20 10:05 紫洁 阅读(417) 评论(0) 推荐(0)
摘要:应用场景一:保证对属性所赋动值是合法的,可以对不合法的数据进行处理。 应用场景二:一个属性的值发生改变,其他会属性的值会跟着改变。 执行完上面的代码会发现,fontColor和backColor都为nil。这是因为,在初始化函数init中不会调用didSet、willSet方法。故可以将上面的代码改 阅读全文
posted @ 2017-03-14 16:02 紫洁 阅读(3532) 评论(0) 推荐(0)
摘要:存储型属性:用于存储一个常量或变量。 计算型属性:不直接存储值,而是通过get、set方法来取值或赋值。同时还可以对其他的属性进行操作。 类型型属性:定义在类上的属性,用static 来修饰属性,需要用类名来调用该属性。 阅读全文
posted @ 2017-03-14 15:08 紫洁 阅读(3745) 评论(0) 推荐(0)
摘要:在swift中,访问修饰符有五种,分别是:private、fileprivate、internal、public、open。其中fileprivate和open是swift 3 新添加的。由于之前的访问控制符是基于文件的,不是基于类的。这样会有问题,故swift 3 增加了两个修饰符,对原来的pri 阅读全文
posted @ 2017-03-14 11:19 紫洁 阅读(959) 评论(0) 推荐(0)
摘要:1 结构体的构造函数 (1)如果结构体中不写初始化函数,则默认会有一个设置全部参数的构造函数。 注意:初始化函数中的参数顺序应该跟结构体定义中的参数顺序相同。 (2)如果在结构体的构造中,变量设置了默认值。怎结构体会有两个初始化函数,一个是:没有任何参数的函数;一个是含有全部参数的函数。但是初始化函 阅读全文
posted @ 2017-03-13 18:46 紫洁 阅读(980) 评论(0) 推荐(0)
摘要:1 定义枚举时,如果不写后面等于的值,默认是从0开始的,依次加1. 2 枚举的类型,默认是Int类型,也可以是其他类型,例如字符串。 如果不写值,默认就是定义case时的字符串 3 Raw Value 3 Associate Value(关联值) 4 也可以关联多个值 5 可选型(Optional) 阅读全文
posted @ 2017-03-13 17:16 紫洁 阅读(257) 评论(0) 推荐(0)
摘要:1. 使用sort方法和闭包对数组进行排序 2. 可以不用指定参数类型,编译器会帮我们判断 3. 可以省略参数名,直接根据数字来引用参数 4. 如果闭包只有一行代码,可以省略return 5. 如果闭包是函数调用的最后一个参数,可以将闭包放到括号外面,提高代码的可读性 6. 换行也是可选的,代码可以 阅读全文
posted @ 2017-03-13 14:41 紫洁 阅读(10435) 评论(0) 推荐(0)
摘要:Swift相比于Objective-C又一个重要的优点,它对函数式编程提供了很好的支持,Swift提供了map、filter、reduce这三个高阶函数作为对容器的支持。 1 map:可以对数组中的每一个元素做一次处理 2 flatMap与map不同之处: (1)flatMap返回后的数组中不存在n 阅读全文
posted @ 2017-03-13 14:21 紫洁 阅读(19165) 评论(0) 推荐(1)
摘要:func swapTwoInts( a: inout Int, b: inout Int) { (a, b) = (b, a) } var x = 1 var y = 2swapTwoInts(a: &x, b: &y)x // 2y // 1 阅读全文
posted @ 2017-03-13 11:13 紫洁 阅读(561) 评论(0) 推荐(0)
摘要:1 整数类型Int,长度与当前平台的原生字长相同: 在32位平台上,Int和Int32长度相同; 在64位平台上,Int和Int64长度相同。 2 对于浮点数(float,double)的数据,可以将数据用下划线分割,使其看起来一目了然。 3 元组Tuple 4 print 5 switch: (1 阅读全文
posted @ 2017-03-06 13:21 紫洁 阅读(291) 评论(0) 推荐(0)
摘要:Any vs AnyObject 将项目里的 AnyObject 转成 Any 可能是大家遇到的第一件适配大事。如何解释这个变化呢?在 Swift 3 之前,我们可以写完一个项目都只用 AnyObject 来代表大多数实例,好像不用与 Any 类型打交道。但事实上,Any 和 AnyObject 是 阅读全文
posted @ 2017-01-10 16:10 紫洁 阅读(259) 评论(0) 推荐(0)
摘要:class是通过引用传递,struct是通过值传递。 把结构体看作是值,把类看作是物体。 结构体:位置(经纬度)、坐标(二维坐标、三维坐标)、温度等等可以直接用值来表示的数据。 类:人、车、动物等。 class可以继承,struct不可以继承。 struct比class更“轻量级”,struct分配 阅读全文
posted @ 2016-12-02 15:41 紫洁 阅读(1009) 评论(2) 推荐(0)