//匿名函数作为函数的参数functext(){print("text方法没有参数、没有返回值")}funcFunName(params:()->Void){params()}FunName(params: text)FunName(params:{()->Voidinprint("匿名函数作为方法的参数,无返回值,无参数")})print("-----------------")funcsum(param:(Int,Int)->Int)->Int{let value =param(1,2)print("value = \(value)")return value
}funcadd(a:Int,b:Int)->Int{return a + b
}print("Sum的Value:"+String(sum(param: add)))
sum {(a:Int, b:Int)->Intin//a:Int, b:Int 也可以简写a, breturn a + b
}var array =[1,23,5,2,5,6]
array.sort{(a, b)->Boolin//(Int, Int) -> Bool in 方法是参数if a < b {returntrue}else{returnfalse}}print(array)
二十八、函数作为方法的返回值
funcplay(value:Int)->Int{return value * value
}funcplay2(value:Int)->Int{return value + value
}functext(param:Bool)->(Int)->Int{return param ? play : play2
}var fun =text(param:true)//playprint(type(of: fun))print(fun(3))
二十九、内嵌函数
functext(param:Bool)->(Int)->Int{funcplay(value:Int)->Int{return value * value
}funcplay2(value:Int)->Int{return value + value
}return param ? play : play2
}var fun =text(param:true)//playprint(type(of: fun))print(fun(3))
//定义枚举、设置枚举值enumTestEnum{case A //或者 case A,B,Ccase B
case C
}print(TestEnum.A)funcFunName(param:TestEnum){if param ==TestEnum.A {print("a")}elseif param ==TestEnum.B{print("b")}else{print("c")}}print("---------")FunName(param:TestEnum.B)enumValueEnum:Int{case A =1case B =2}print(ValueEnum.A)//Aprint(ValueEnum.A.rawValue)//1
enumTextEnum:String,CaseIterable{case swiftui ="SwiftUI"case foundation ="Foundation"}for item inTextEnum.allCases{print(item)}for index in0..<TextEnum.allCases.count{print(TextEnum.allCases[index])}
三十四、结构体的定义和使用
//结构体的定义和使用structStudent{var name ="unknow"var age =0var score =0.0var ispass =falsestaticvar schoolName ="清华大学"//空初始化器init(){}init(name:String,age:Int,score:Double){self.name = name
self.age = age
self.score = score
ifself.score <60{self.ispass =false}else{self.ispass =true}}//结构体不建议写get、set方法 getter setter是类的funcgetName()->String{returnself.name
}funcgetAge()->Int{returnself.age
}funcgetScore()->Double{returnself.score
}funcgetIsPass()->Bool{returnself.ispass
}//函数中修改结构体的值 需要用到mutatingmutatingfuncsetScore(score:Double){self.score = score
ifself.score <60{self.ispass =false}else{self.ispass =true}}}var a =Student()print(a.getName())var b =Student(name:"张三", age:19, score:90)//创建结构体print(b)print(b.name)print(b.getName())
b.setScore(score:10)print(b.score)print(b.ispass)//Student.schoolName = "123123"structTest{var age =10let b =100// 无法通过结构体进行修改 例如 T.b =}var t1 =Test()//如果用let 修饰 也无法修改print(t1.age)var t2 =Test()print(t2.age)print("-----")
t2.age =100//值传递print(t2.age)print(t1.age)print("-----")
三十五、计算属性
//计算属性structPerson{privatevar value =""var name:String{// set(param){// value = param// print("set -" + value)// }set{
value = newValue //如果没有set(),系统默认提供的是newValueprint("set -"+ value)}get{print("get - "+ value)return value +" I Love You"}}init(){}init(name:String){self.name = name
}}var person =Person()
person.name ="小张"//setter
person.name //gettervar person2 =Person(name:"小李")print(person2)