【Swift】一、基础随记

2017-08-16  本文已影响7人  HoyaWhite

一、switch中的元组及数值绑定和条件绑定

let swiNum = ("lhy", 25)
switch swiNum {
case ("lhy", let age):
  //数值绑定
  print("this is lhy, and age is \(age)")
case (_, 1...100):
  //忽略元组某一个元素用_
  print("正常人")
case (_, let age) where age < 0 || age > 120 :
  //条件绑定
  print("maybe you are not person")
default:
  print("other")
}
二、函数及闭包

1. 函数可以使用元组返回多个数值,参数个数可以变化;函数可以作为参数、返回值。

//1. 可变个数 的参数 其实在函数内以数组形式存在 类似[Int]
func sumOf(numers:Int...) -> Int{
    var result = 0
    
    for num in numers {
        result += num
    }
    return result
}
sumOf(numers: 1, 2, 3)
//类似于数组
func sumOfArr(numbers:[Int]) -> Int{
    var result = 0
    for num in numbers {
        result += num
    }
    return result
}
sumOfArr(numbers: [1, 2, 3])

//2. 使用元组(tuples)返回多个数据
func tuples(param:Int) -> (increase:Int, decrease:Int){
    let increase = param + 1
    let decrease = param - 1
    
    return (increase, decrease)
}
tuples(param: 10)

//3.1 ??? 函数是第一等类型,这意味着函数可以作为另一个函数的返回值
func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
print(increment)   // "(Function)\n" 说明返回值是一个函数 创建了一个函数 面向对象??闭包
increment(7)
//3.2 函数作为一个参数 传递给另外一个函数 可以把函数理解为一个区块、对象、block、闭包
func paramFunc(condition:(Int) -> Bool, value:Int) -> Bool{
    if condition(value) {
        return true
    }
    return false
}
func conditionFunc(value:Int) -> Bool{
    if value < 10 {
        return true
    }
    return false
}
paramFunc(condition: conditionFunc, value: 8)

2. 函数实际上是一种特殊的闭包:它是一段能被调取的代码。闭包中的代码能访问闭包作用域中的变量和函数,即使闭包是在一个不同的作用域被执行的 - 你已经在嵌套函数的例子中看过了。你可以使用 {} 来创建一个匿名闭包。使用 in 将参数和返回值类型的声明与闭包函数体进行分离

let returnValue1 = numbers.map({
    //in是分隔符
    (num: Int) -> Int in
    let result = num * 3
    return result
})
print(returnValue1)

//如果一个闭包的类型已知,比如作为一个代理的回调,你可以忽略参数,返回值,甚至两个都忽略。单个语句闭包会把它语句的值当做结果返回
let mappedNumbers = numbers.map({ num in num * 3 })
print(mappedNumbers)

//通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面。当一个闭包是传给函数的唯一参数,你可以完全忽略括号。
let sortedNumbers = numbers.sorted{$0 > $1}
print(sortedNumbers)
上一篇 下一篇

猜你喜欢

热点阅读