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

2017-09-20  本文已影响12人  zvving
Swift

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

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

分享 Point

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 是强类型语言(不是玩具语言)

可选类型

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

代码略

优美

代码略

现代

面向对象时银弹吗?

例子: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

总结

图片来源

上一篇 下一篇

猜你喜欢

热点阅读