美文网首页
[分享摘要]Swift 语言上手指北

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

作者: zvving | 来源:发表于2017-09-20 17:08 被阅读12次
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,优秀的语言特性学习学习,已经很好

图片来源

相关文章

网友评论

      本文标题:[分享摘要]Swift 语言上手指北

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