美文网首页
iOS开发月报#7|201901

iOS开发月报#7|201901

作者: zhangferry | 来源:发表于2019-01-31 10:04 被阅读32次

    这里记录过去一个月,我看到的值得分享的内容,包含但不限于iOS知识,每个月的最后一天发布。
    欢迎推荐内容,可以前往zhangferry/iOSMonthlyReport提交issue。

    另外,马上就要过年了,提前祝大家春节快乐!


    201901_cover

    新闻一览

    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语法。

    相关文章

      网友评论

          本文标题:iOS开发月报#7|201901

          本文链接:https://www.haomeiwen.com/subject/svhksqtx.html