- guard语法
guard
语句和if
语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。
但与if
语句不同的是,guard
语句只会有一个代码块,不像if
语句可以if else
多个代码块。
可以把guard
近似的看做是Assert
,但是你可以优雅的退出而非崩溃。
guard ... else {return}
guard let ... else {return}
相当于if not { return }
-
for in 循环
//循环三次 for i in 0...2 { } //循环三次 for _ in 0..<3 { } //循环imageCount次 for i in 0...imageCount - 1 { } //循环imageCount次 for var i = 0; i < imageCount; i ++ { }
数组的reduce,map,filter,forEach方法
-
forEach(遍历)
let arr = [1, 2, 4] arr.forEach { print($0) }
-
map(映射)
对数组元素进行某种规则的转换
let arr = [1, 2, 4] let brr = arr.map { "No." + String($0) } //brr = ["No.1", "No.2", "No.3"]
-
filter(筛选)
对数组元素进行某种规则的过滤
let arr = [1, 2, 4] let brr = arr.filter { $0 % 2 == 0 } //brr = [2, 4]
-
reduce(累加)
基础思想是将一个序列转换为一个不同类型的数据,期间通过一个累加器(
Accumulator
)来持续记录递增状态。它是
SequenceType
中的一个方法,看起来是这样的(简化版本):func reduce<T>(initial: T, combine: (T, Self.Generator.Element) -> T) -> T
它拥有一个
初始值
(Initial value)以及一个闭包
(返回值类型和初始值类型一致)。函数最后的返回值同样和初始值类型一致,为 T。对数组累加操作实现:
func combinator(accumulator: Int, current: Int) -> Int { return accumulator + current } [1, 2, 3].reduce(0, combine: combinator) // 执行步骤如下 combinator(0, 1) { return 0 + 1 } = 1 combinator(1, 2) { return 1 + 2 } = 3 combinator(3, 3) { return 3 + 3 } = 6 = 6
使用
reduce
方法实现map
的功能let arr = [1, 2, 4] let brr = arr.reduce([]) { (sum : [Int] , current: Int) -> [Int] in var t = Array(sum) t.append(current * 2) return t } // brr = [2, 4, 8] //此方法如果数组很大, reduce第一个参数会不断在参数传递过程被复制然后丢弃, 运行效率很有问题。
网友评论