iOS开发月报#7|201901

这里记录过去一个月,我看到的值得分享的内容,包含但不限于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<S>(_ 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<S>(_ 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语法。

喜欢周刊 → 支持一下 ❤️