从零开始Swift学习:函数篇
函数篇包括:函数,闭包,枚举,结构体
1.函数
【1】函数的格式
func funcname(形参)->returntype{
Statement1
Statement2
……StatementN
return parameters
}
【2】参数和返回值都可以为空
【3】函数的调用
funcname(参数)
2.闭包
闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值。
闭包很多优点:1.根据上下文推断参数和返回值类型
2.从单行表达式闭包中隐式返回(也就是闭包体只有一行代码,可以省略return)
3.可以使用简化参数名,如$0, $1(从0开始,表示第i个参数...)
4.提供了尾随闭包语法(Trailing closure syntax)
【1】闭包的格式
{(parameters)->return type in
statements
}
【2】闭包相当于一个函数,相当于block
var haha : () ->Int//创建一个闭包
haha = {() in//声明一个闭包
return 1
}
print(haha())//调用一个闭包
【3】shorted sorted(by:),使用sorted排序需要满足
1.已知类型的数组
2..闭包函数,该闭包函数需要传入与数组元素类型相同的两个值,并返回一个布尔类型值来表明当排序结束后传入的第一个参数排在第二个参数前面还是后面。如果第一个参数值出现在第二个参数值前面,排序闭包函数需要返回 true,反之返回 false。
(1).可以写闭包函数
func backName(one: Int, two: Int) ->Bool{
return two > one
}
var nameOK = names.sorted(by: backName)
print(nameOK)
(2).可以使用<,>
var nameON = names.sorted(by: >)
print(nameON)
【4】闭包可以作为函数的返回值
func makeIncrementor(forIncrement amount: Int) -> () -> Int {//粗体是个闭包
3.枚举
枚举感觉和OC差不多,接下来介绍区别
【1】当调用了一次初始值后,后面的可以直接.属性来推断出初始值
var testName = testEnum.name("DDYMT")
var testMark = testEnum.mark(40, 50, 60)
switch testName {
case .name(let myName):
print(myName)
case .mark(let one, let two, let three):
print(one + two + three)
}
【2】枚举有相关值和原始值
相关值:1.不同的数据类型 2.相关值是当你在创建一个基于枚举成员的新常量或变量时才会被设置,并且每次当你这么做得时候,它的值可以是不同的。
enum testEnum{
case name(String)
case mark(Int, Int, Int)
}
var testName = testEnum.name("DDYMT")
var testMark = testEnum.mark(40, 50, 60)
原始值:1.相同的数据类型 2.原始值始终是相同的3.原始值为Int的时候具有隐式赋值
enum day : Int {
case one = 1, two, three
}
print(day.two)
4.结构体
我的理解是存储相同类似的值。
1.结构体具有固定值直接访问,可以使用let进行实例化,再通过.号访问结构体的属性
struct firstStruct {
var one = 10
var two = 20
var three = 30
}
let number = firstStruct()
print(number.one)
2.结构体内部的值是外部赋值的,如同OC的frame属性的结构体
struct twoStruct{
var mark : Int
var mark2 : Int
init(mark: Int, mark2: Int) {
self.mark = mark
self.mark2 = mark2
}
}
var oneVarStruct = twoStruct(mark:97, mark2: 100)
oneVarStruct.mark2 = 200
print("\(oneVarStruct.mark)和\(oneVarStruct.mark2)")