美文网首页
[分享摘要]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