这里记录过去一个月,我看到的值得分享的内容,包含但不限于iOS知识,每个月的最后一天发布。
欢迎推荐内容,可以前往zhangferry/iOSMonthlyReport提交issue。
另外,马上就要过年了,提前祝大家春节快乐!
新闻一览
Github宣布私有库免费
Github宣布提供免费且不限量的私有仓库服务,如果协作者超过3个仍需购买付费服务。
喜大普奔啊,得知消息之后,我赶紧就建立一个私有仓库,放一些不想让你们看到的东西
Swift 5 Release Notes for Xcode 10.2 beta
Swift5 版本终于发布了,最低可以使用Xcode10.2beta 查看。Swift5 带来了ABI稳定,届时系统将自带Swift动态库,由Swift编译的项目将不会自动把运行库打到包里。
Swift5 具体还有哪些特性,可以参考知识小集团队的翻译版本
Tips
Dictionary的merge操作
Dictionary
的merge可能平常用的不多,我是在一次bug排查的过程中,发现自己对merge操作理解也有些偏差。这里做个简单梳理。
看其中一种情况:
var dictionary = ["a": 1, "b": 2]
// Keeping existing value for key "a":
dictionary.merge(["a": 3, "c": 4]) { (current, _) in current }
// ["b": 2, "a": 1, "c": 4]
// Taking the new value for key "a":
dictionary.merge(["a": 5, "d": 6]) { (_, new) in new }
// ["b": 2, "a": 5, "c": 4, "d": 6]
注意尾随闭包中有两个参数,返回第一个参数,表示如果merge操作有重复key值,将保留merge前的value不变。如果闭包返回第二个参数,如果merge有重复key,将更新至最新值。
Dictionary
向关的merge函数一共有四个,使用类似:
public mutating func merge(_ other: S, uniquingKeysWith combine: ([Key : Value].Value, [Key : Value].Value) throws -> [Key : Value].Value) rethrows where S : Sequence, S.Element == (Key, Value)
//上面示例对应方法
public mutating func merge(_ other: [[Key : Value].Key : [Key : Value].Value], uniquingKeysWith combine: ([Key : Value].Value, [Key : Value].Value) throws -> [Key : Value].Value) rethrows
public func merging(_ other: S, uniquingKeysWith combine: ([Key : Value].Value, [Key : Value].Value) throws -> [Key : Value].Value) rethrows -> [[Key : Value].Key : [Key : Value].Value] where S : Sequence, S.Element == (Key, Value)
public func merging(_ other: [[Key : Value].Key : [Key : Value].Value], uniquingKeysWith combine: ([Key : Value].Value, [Key : Value].Value) throws -> [Key : Value].Value) rethrows -> [[Key : Value].Key : [Key : Value].Value]
一些Git操作
删除子目录git
当一个含git的目录包含了其他含git目录时,外部git是不能将内部git纳入版本管理的。有一种解决方案是,移除内部的git仓库。
1、删除内部git
cd 需要移除的git目录
rm -rf .git # 或者显示隐藏目录手动删除.git文件夹
此时虽然已经删除了.git
但是原目录还存在缓存,无法添加到外部git中。
2、删除缓存内容
git rm -r --cached next
git pull强制覆盖本地文件
当我们需要将某一分支,跟远程对应分支保持一致时,可以做如下操作:
git fetch
git reset --hard origin/branch_name
git pull
fatal:refusing to merge unrelated histories
当我们为一个项目关联了一个远程仓库,执行pull的操作时出现
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
fatal: refusing to merge unrelated histories
这是因为git从2.9.0版本开始,预设行为不允许合并没有共同祖先的分支。如果你非要合并,需要加上--allow-unrelated-histories
参数才行:
git pull origin master --allow-unrelated-histories
几个提高效率的快捷键
最近在熟练使用了几个快捷键后,明显感觉开发效率提高了不少,这里总结了几个常用但不是非常常用的快捷键(Command + C 和 Command V等)。另外
- Command(或 Cmd)⌘
- Shift ⇧
- Option(或 Alt)⌥
- Control(或 Ctrl)⌃
- Power 电源键
Xcode
Command + Shift + J 文件目录指向当前文件
Command + Shift + O 文件、对象搜索
Command + Shift + F 全局搜索
Command + shift + , 编辑 scheme
Command + Control + Left/Right 浏览历史切换
Command + Option + Left/Right 折叠、展开当前代码段
Command + Option + C 显示Commit界面
系统操作
Command + Option + Power 睡眠状态
Power 1.5s睡眠状态
Command + Control + Power 强制Mac重启
适用其他程序
Command + , 打开偏好设置
Command + W 关闭最前面的窗口
Command + Option + W 关闭应用所有窗口
Command + Q 推出应用
Command + M 最小化
Command + Shift + [/] 左右切换应用tab
推荐阅读
未来世界的幸存者
今年市场经济不景气,很多互联网公司经历“裁员潮”,其实不光是换联网行业,其他行业也面临同样的问题。那怎么提高自己的核心竞争力,是每一个从事互联网行业的人都应该考虑的。我们不应该只满足于日常开发,要找准自己的定位,提早做职业规划。另外不断尝试拓展自己的知识面,增加自己的影响力,这样才能让自己在不断变化的市场中立于不败之地。
除了阮老师的这本书,还推荐
卓同学的iOS 2019 隆中对
什么是真正的程序员
作者仿照《小王子》中的情节,通过小printf遇见的不同类型的程序员,最后悟出什么才是真正的程序员!
有两个概念比较有意思:
- 达克效应:能力强的人总是低估自己,能力弱的人总是高估自己。
- 能够为人们解决真正需要解决的问题的程序员,才是真正的程序员
Language Server Protocol
来自SwiftGG翻译组的一篇文章。
苹果公司 在 Swift.org 论坛上宣布,正在着手为 Swift 和 C 语言支持 Language Server Protocol(语言服务器协议,LSP)。
那这意味着什么呢?这可能是苹果自 2014 年将 Swift 作为开源软件发布以来,为 Swift 做出的最重要的决定。它意味着我们可以不必使用Xcode去开发Swift项目,而是可以选择像是Visual Studio, Atom这些IDE。Swift将变成一种更加通用的变成语言。
Hashable / Hasher
Hash是程序开发过程中很重要的一个概念,它可以让我们查找集合特定元素的时间复杂度由O(n)降低到O(1)。
这篇文章介绍了Swift中关于哈希的实现,哈希冲突的改变,以及Swift4.1之后关于自动化实现Equatable
的相关介绍。
Table View 太複雜?利用 MVVM 和 Protocol 就可以為它重構瘦身!
TableView是我们常用的系统部件,随着业务逻辑的不断迭代它内部的逻辑可能会越来越复杂,代码量也越来越多,如果不能很好的组织逻辑架构,这里会变得非常臃肿。
作者利用MVVM pattern
,加上一点Protocol
技巧,来简化dataSource的工作,把UI和逻辑解耦合,并且最大化这个tableView模组的扩展性。
音视频
临近年关,可能很多人会考虑年后换工作的情况,最近几期的ggtalk也在讨论跳槽这个大家比较关注的话题,希望大家收听之后能够有所收获:
狭义跳槽论:面试官,大厂新人和准备起跳的某 C
广义跳槽论:简洁明了的方法论
附带之前的几期关于升职加薪的节目:
聊聊程序员的升职加薪(上)
聊聊程序员的升职加薪(下)
程序员的春节趣事
今天上班路上听了这期节目,全程非常的欢快。我是今天晚上回家的火车,那些相似的春节趣事我也马上要经历一次了,是需要提前准备下怎么应对了。
以下是官方内容介绍:
快过年了,估计大家也没心情工作学习,准备进入放假状态。严肃的话题放到年后,这期我们请到了袁滚滚、张思琦和老朋友莲叔,围绕着春节轻松愉快的聊一期。
Github
本篇GitHub模块,介绍几个Git和GitHub相关的项目。
Git中文教程
来自geeeeeeeeek的高质量Git中文教程,在GitHub已经获得了1w+的start。对git操作还有疑问的同学可以借助这份教程,完整的梳理一下git相关的知识,或者扫一下git盲区。
Git的奇技淫巧
我们在使用git的时候,有时候会被一些具体的问题难住,这篇文章从具体操作入手,介绍一些我们知道但不一定都用过的git指令。
等等,我也想写一份我自己的Git奇淫技巧了,因为git这个东西是真的庞大。
HelloGitHub
这是一个面向编程新手、热爱编程、对开源社区感兴趣人群的项目,内容以月刊的形式更新发布。内容包括:流行项目、入门级项目、让生活变得更美好的工具、书籍、学习心得笔记、企业级项目等,这些开源项目大多都是非常容易上手、很 Cool,能够让你用很短时间感受到编程的魅力和便捷。从而让大家感受到编程的乐趣,动手开始编程。
GitHub漫游指南
介绍你可能在Github上遇到的所有问题,从如何起一个好名字到如何推广项目,GitHub用户分析,每一个环节都非常详细。无论你处于编程的哪个阶段,我认为你都能从这份指南中获取到灵感和帮助。
README
该文件用来测试和展示书写README的各种markdown语法。GitHub的markdown语法在标准的markdown语法基础上做了扩充,称之为GitHub Flavored Markdown。简称GFM,GFM在GitHub上有广泛应用,除了README文件外,issues和wiki均支持markdown语法。