[分享摘要]Swift 语言上手指北

Swift

程序员由于使用的编程语言不同,他的思考方法和编写出来的代码都会受到编程语言的很大影响。
——松本行弘

如果一门语言不能影响你的编程思想,那这门语言没有学习的必要。

分享 Point

  • 没大段代码,没项目
  • 涉及语言方面尽可能多,细节一带而过
  • 本人 Swift 新手一枚,分享旨在勾引,尽可能介绍我理解的 swift 语言魅力为要

Swift 介绍

介绍

Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.
Safe, Fast, Expressive.
——Swift.org - About Swift

一门安全、优美、现代的语言。

代码略

安全

为什么说 Swift 是强类型语言(不是玩具语言)

  • if, while 等严格限定 Bool
  • 不支持类型隐式转换

可选类型

Null 引用的设计是十亿美金错误
——Tony Hoare

  • 函数接口设计宽进严出,同时又要保持语义清晰
  • 引入 optional 也会带来麻烦(解包等);而如果不引入,只是假装这个问题不存在

代码略

优美

  • 诸多现代语言特性可以让呆萌结构拆分更合理、语句更清晰
  • 3.0 API 设计先行
  • Guard 等细节
  • 注释支持 Markdown

代码略

现代

面向对象时银弹吗?

  • 不同继承关系等类如何共用代码
  • copy & Paste
  • 改变继承关系
  • 多继承
  • 依赖注入
  • Trait

例子:OOP vs POP

值类型

闭包

//: 闭包简化过程

let arr = [1, 3, 7, 9, 5]

// 完整闭包表达式
let rs0 = arr.sorted(by: { (item0: Int, item1: Int) -> Bool in
    return item0 < item1
})

// 类型推断
let rs1 = arr.sorted(by: { item0, item1 in
    return item0 < item1
})

// 单行隐式返回
let rs2 = arr.sorted(by: { item0, item1 in item0 < item1 })
rs2

// 参数名称缩写
let rs3 = arr.sorted(by: { $0 < $1 })
rs3

// 尾随闭包简化方向
let rs4 = arr.sorted() { $0 < $1 }
rs4
// 唯一参数,括号可省略
let rs5 = arr.sorted { $0 < $1 }
rs5

// 运算符方法简化方向: Swift 可以自动推断出你想使用小于号的 Int 比较函数实现
let rs6 = arr.sorted(by: <)

闭包带来的写法简化

范型

自定义(重载)运算符

一个古老的故事:p0 和 p1 相爱❤️,于是就有了 baby……

class Person {
    var name: String
    var babies = [Person]()
    
    init(name aName: String) {
        name = aName
    }
}

infix operator ❤️: AdditionPrecedence
extension Person {
    static func ❤️ (left: Person, right: Person) -> Void {
        let baby = Person(name: left.name + right.name)
        
        left.babies.append(baby)
        right.babies.append(baby)
    }
}

p0 ❤️ p1

p0.babies
p1.babies

总结

  • Swift 取代 Objc 是必然,每名 iOSer 都该学习,特别是 Swift4 发布后的现在
  • Swift 语言本身设计非常考究,精简而又灵活强大,很多的实现交给标准库,给后续的发展留下很大空间
  • 学习过程中注意区分哪些是语言特性,哪些事标准库提供的封装,对细节理解会更准确
  • Swift 对 Protocol Oriented Programming、Functional programming、ReactiveX 这些编程思想支持很好,这些学习门槛不低,不必急于求成,你依旧可以选择先用你自己的方式(比 Objc 略略优化)写好代码
  • Swift 给开发提升自己的机会,它不能阻止开发写出垃圾代码(或许能一丝丝阻止)
  • Swift 野心极大(取代 java),最终目标很难实现。工程师先不用管这些,如果场景合适,写写 App,优秀的语言特性学习学习,已经很好

图片来源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容