1.Swift 源码目录简介(对以后看源码很有帮助)
image.png
2. Array 中 map 的实现
- swift 中可以将 map 的实现从源码中拿出来,解决放到项目中进行
断点观察
,这是帮助我们理解源码非常方便的方式
// 来自 github 中 Swift 开源的 map 实现源码
extension Collection {
public func map<T>(
_ transform: (Element) throws -> T
) rethrows -> [T] {
let n = self.count
if n == 0 {
return []
}
var result = ContiguousArray<T>()
result.reserveCapacity(n)
var i = self.startIndex
for _ in 0..<n {
result.append(try transform(self[i]))
formIndex(after: &i)
}
return Array(result)
}
}
var array = [1,2,3].map({ "value is \($0)" })
print(array)
3. Optional 中 map 的实现
// Optional map
public func map<U>(
_ transform: (Wrapped) throws -> U
) rethrows -> U? {
switch self {
case .some(let y):
return .some(try transform(y))
case .none:
return .none
}
}
// Optional flatMap
public func flatMap<U>(
_ transform: (Wrapped) throws -> U?
) rethrows -> U? {
switch self {
case .some(let y):
return try transform(y)
case .none:
return .none
}
}
// 两者区别
var value:Int? = 10
print(value.map({ Optional.some($0+3) })) // Optional(Optional(13))
print(value.flatMap({ Optional.some($0+3) })) // Optional(13)
- 因此,我们有时候用 flatMap 来解包计算会使得代码很简洁
4. Optional 中 ?? 空合并运算符
的实现
5. Optional 中 ==
的实现
网友评论