【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)