Swift 3.0 标准库源码阅读笔记——Sequence 和 Collection | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (9)
在日常的编程中,关于集合类型的特性大部分情况下用 Swift 标准库提供的 Set、Dictionary以及 Array 完全足够了, 当然,必要时也可以自己定制自己的集合,这就意味着需要了解与之相关的协议,而理解这些协议也对于我们更好地使用已有的集合类型有莫大帮助。 而集合相关的协议主要是 Sequence 与 Collection。
关于 Swift 的 Sequence 和 Collection 实际上包含了一系列的协议,为了理解其工作原理并且正确使用,需要理清这些协议之间的关系以及各自的用途。
从用途上来说, 一个 Collection 必然是一个 Sequence ,简而言之,Collection 包含了 Sequence 所有的特性,同时又具备更加丰富的功能。
Sequence 的核心是 迭代,它可以生成一个迭代器,完成遍历,即为其核心也是唯一的功能,在遍历的基础上,Swift 为 Sequence 实现了诸多诸如 map、filter 这些大家用的比较多的方法的默认实现。
Collection 相比于 Sequence, 最大的特点在于下标,即不需要遍历也可以取到...阅读全文

 Swift 3.0 标准库源码阅读笔记——从 StringBuffer 到 String 的内存初探 | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (3)
_StringCore 的 owner 到底是什么玩意儿?
为什么有些有 owner 有些没 owner ?
代码注释里所说的 String 共享 Buffer 究竟是怎么回事 ?
_StringBuffer 是个啥玩意儿 ?
带着一系列的问题,继续去读代码。(麻蛋,为什么找不到现成的资料 =.= )
首先讲一讲已有的资料是怎么讲String的内存管理机制。
在 Swift Programming Language 中, 有这样一段描述:
Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。 值类型在 结构体和枚举是值类型 中进行了详细描述。
Swift 默认字符串拷贝的方式保证了在函数/方法中传递的是字符串的值。 很明显无论该值来自于哪里,都是您独自拥有的。 您可以确信传递的字符串不会被修改,除非你自己去修改它。
在实际编译时,Swift 编译器会优化字符串的使用,使实际的复制只发生在绝对必要的情况下,这...阅读全文

 初探 ReactiveSwift | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (0)
这篇文章其实算是一篇学习笔记,先是回顾了 MVVM 和 ReactiveCocoa 的历史,然后对 ReactiveCocoa 5.0 拆分出来的 ReactiveSwift 中的一些概念结合源码做了一定的解释。
在下一篇文章中,我还会通过一个复杂度适中的案例完成一个使用 MVVM + ReactiveCocoa 的 Demo, 总结了一些开发过程中的注意要点。(这篇太长了 +。=)
忆往昔关于 MVC 与 MVVM,其实已经被讨论了好几年,不知道多少年前是谁带的头,吐槽苹果官方所推荐的 MVC 模式就是 Massive View Controller,然后各路人马就费劲脑汁怎么给 ViewController 瘦身,抽出个 DataSource,抽出个ViewModel,抽出个啥啥啥,其实个人以为大部分情况下只是让 ViewController 看起来不那么臃肿,如果操作不当,可能不但没有降低其耦合性,反而可能增加了许多不必要的依赖。
MVVM 这个模式其实最早是微软提出的,结合了 MVP 的架构和WPF(微软的双向绑定)技术。
对,没错,就是双向绑定,MVVM 严重依赖于双...阅读全文

 ReactiveCocoa5.0 + MVVM 实践 | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (7)
几个重要原则
View、ViewModel 和 Model 的依赖关系
1. ViewModel 不依赖于 ViewMVVM 依赖于数据的双向绑定,View 会依赖于 ViewModel, 由 View 来完成 View 与 ViewModel 之间的数据绑定,一旦绑定完成,ViewModel 中对应的数据发生改变,会通过信号发送事件,View 也会根据事件和数据更新界面。
ViewModel 是独立于 View 的, 这就意味着 ViewModel 不应该引入 UIKit ,这是一个比较重要和简单的检验标准:
ViewModel 不应该引入 UIKitViewModel 的这个特性意味着 ViewModel 可以方便的进行单元测试,要知道,当原先复杂的业务逻辑都聚集在 ViewController 或者或多或少依赖于 View 的时候,要做单元测试简直是噩梦。
2. Model 不依赖于 ViewModel, 更加不依赖于 View 同 View 与 ViewModel 的关系类似, ViewModel 依赖于 Model, 一般 ViewModel 会将原始的 Model...阅读全文

 如何处理 RMBP 蛋疼的 Wi-Fi 问题 | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (5)
最有效方案有一种情况是能够连接上其他的路由器,但是就唯独不能连接你想连的那个,但是你想连的那个其他设备又能连得上。
于是究竟是你电脑的问题还是这个路由器的问题呢?
路由器问题国外的路由器只有11个信道,而国内的都是有13个信道的,路由器的信道默认是“自动”,这就意味着如果路由器自动使用了超过11的信道,那么你的苹果设备就无法访问到了,所以此时需要去配置下路由器,将信道固定为11以下。以上方案亲测奏效过。
再有就是路由器本身的问题了,建议升级下固件。电脑问题当你尝试了以上所有的方案依然没有解决 Wi-Fi 问题,即使暂时解决了但是依然会间歇性抽风,这个时候极有可能你遇到了困扰我很久的同样的一个问题,此时你只需要做一个操作:拔掉连接你电脑上的所有 USB 设备尤其是靠近电源接口的那个,不出意外,无线网卡也就在这个问题,如果你使用了外接USB扩展的话,十有八九就会出现 USB 接口干扰无线信号的问题导致 Wi-Fi 连接不上以及异常不稳定。
...阅读全文