5.31
计划
总结
体操一 总结: Optional
- Optional多层嵌套容易出错,尽量避免使用
- Optional可以接收非Optional的值
- Optional存在两个构造函数,当类型不匹配时系统会调用对应的构造方法进行构造
public enum Optional<Wrapped> : _Reflectable, NilLiteralConvertible {
case None
case Some(Wrapped)
@available(*, unavailable, renamed="Wrapped")
public typealias T = Wrapped
/// Construct a `nil` instance.
@_transparent
public init() { self = .None }
/// Construct a non-`nil` instance that stores `some`.
@_transparent
public init(_ some: Wrapped) { self = .Some(some) }
}
- 删除字典元素时应注意value的类型,根据源码知value类型为String?时,她接收的是String??类型的参数.但是,我们给value赋值nil总是不会错的
public subscript(key: Key) -> Value? {
get {
return _variantStorage.maybeGet(key)
}
set(newValue) {
if let x = newValue {
// FIXME(performance): this loads and discards the old value.
_variantStorage.updateValue(x, forKey: key)
}
else {
// FIXME(performance): this loads and discards the old value.
removeValueForKey(key)
}
}
}
体操二 总结: 函数
函数编程:
数据与函数是低耦合的
函数隐藏了它们的实现,语言的抽象是函数,以及将函数组合起来表达。
核心抽象模型是函数,不是数据结构
核心活动是编写新的函数。
变量缺省是不变的,减少可变性变量的使用,并发性好
函数是"第一等公民"
所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。
Swift中数组的map、filter、reduce等就是函数式编程最直观的应用
- 低耦合很重要,个人认为编程中不断追求低耦合就会想函数式编程靠拢
- 泛型在函数式编程的运用,让函数适应各种数据类型,使用范围更广
- 用函数做参数、返回值会让程序可读性降低,typealias的运用显得重要
- 摸清自己的习惯,尽量向约定俗成的规范靠拢,不要一味追求精简,该写的参数、返回值等还是要写上
延伸学习
-
LLDB调试
目前只会用几个简单的命令
-
@noescape -> 解决闭包"保留环问题"
-
throws throws 全解析
一个可以抛出的方法实际上做的事情是执行一个闭包,接着选择返回一个值或者是抛出一个异常
let fileManager = NSFileManager.defaultManager()
let url: NSURL = NSURL(fileReferenceLiteral: "http://www.ibm.com/developerworks/cn/mobile/mo-cn-swift/index.html")
do{
try fileManager.copyItemAtURL(url, toURL: url)
}catch let error as NSError{
print("cuo le: \(error.localizedDescription)")
}
网友评论