程序员由于使用的编程语言不同,他的思考方法和编写出来的代码都会受到编程语言的很大影响。
——松本行弘
如果一门语言不能影响你的编程思想,那这门语言没有学习的必要。
分享 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
值类型
闭包
- Objective-C sort 闭包写法
- Java sort 闭包写法
- Swift 赋予闭包函数本该有的样子 Objc 与之一战 😂
//: 闭包简化过程
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,优秀的语言特性学习学习,已经很好
网友评论