//函数
//函数定义
/*
func 函数名 (参数列表) -> (返回值类型) {
代码块
}
*/
func sayHello (name : String) -> (String) {
return "Hello " + name
}
sayHello("qiaodaye")
//多个参数,参数之间用逗号隔开
func sayBaiBai (name : String, name1 : String) -> (String) {
return "Bye " + name + " And " + name1
}
sayBaiBai("Xiangwang", "Guozhong")
// 返回值为多个参数 返回值为元组类型
func sayInfo (name : String, age : Int) -> (String, Int) {
return (name, age)
}
sayInfo("baby", 27)
//函数类型的变量
//有点类似之前学过的函数指针
var funcType : String -> String = sayHello
funcType("lantian")
func sayByeBye(name : String) -> String {
return "Hello " + name
}
funcType = sayByeBye
funcType("beijing")
//sayBye("beijing")
//参数没有名字,我们需要添加一个外部参数
//1.在参数前加一个外部参数名字 注:不能在函数中使用外部参数名
//2.在参数名前加 #
func personInfo(name personName : String, #sex : String, age : String = "25") -> String {
return personName + " " + sex
}
//personInfo(name:"张三", "男")
personInfo(name: "咱三", sex: "男")
//可变参数
func sumValue(numbers : Float...) -> Float {
var sum : Float = 0.0
for number in numbers {
sum += number
}
return sum
}
sumValue(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
//如果需要用到参数运算(修改参数的值) 需要在此之前加var修饰
func hanshu (var a : Int, b : Int) {
a += 3
}
var number = 5
hanshu(number, 5)
var number1 = 5
var number2 = 3
//inout 关键字: 如果说我们改变传递的值,则需要用inout修饰变量
//传递参数的时候,要用&
func swap (inout number1 : Int, inout number2 : Int) {
var tem = number1
number1 = number2
number2 = tem
}
swap(&number1, &number2)
number1
number2
func changeValue (isOne : Bool) -> (Int -> Int) {
func plusOne(Number : Int) -> Int {
return Number + 1
}
func pluseTwo(number : Int) ->Int {
return number - 1
}
return isOne ? plusOne : pluseTwo
}
changeValue(true)
var cc : (Int -> Int) = changeValue(true)
cc(20)
func changeValue2(number : Int, isOne : Bool) -> Int {
func plusOne(number : Int) ->Int {
return number + 1
}
func plusTwo(number : Int) ->Int {
return number - 1
}
return isOne ? plusOne(number) : plusTwo(number)
}
changeValue2(24, false)
/*************************************************/
//闭包
//闭包跟OC的block一样
//{
// (参数列表)->返回值 in
// 闭包的实现
//}
var names = ["qiaoming", "kan", "taobao"]
names.reverse()
var sortedName1:() = sort(&names, {
(stringA : String, stringB : String) -> Bool in
return stringA < stringB
})
names
//去掉类型 通过类型推断自动推断出stringA stringB的类型
var sortedName2:() = sort(&names, {
(stringA, stringB) -> Bool in
return stringA < stringB
})
names
var sortedName3:() = sort(&names, {
return $0 > $1
})
// $0表示第一个数, $1表示第二个数
var sortedName4:() = sort(&names, <)
names
/*************************************************************/
// nil Nil NULL NSNULL
// nil 指向不存在的对象指针,对对象赋空值
// Nil 指向零的类指针,对类进行赋空值
// NULL 0,对非对象指针赋空值
// NSNULL 空对象
//函数定义
/*
func 函数名 (参数列表) -> (返回值类型) {
代码块
}
*/
func sayHello (name : String) -> (String) {
return "Hello " + name
}
sayHello("qiaodaye")
//多个参数,参数之间用逗号隔开
func sayBaiBai (name : String, name1 : String) -> (String) {
return "Bye " + name + " And " + name1
}
sayBaiBai("Xiangwang", "Guozhong")
// 返回值为多个参数 返回值为元组类型
func sayInfo (name : String, age : Int) -> (String, Int) {
return (name, age)
}
sayInfo("baby", 27)
//函数类型的变量
//有点类似之前学过的函数指针
var funcType : String -> String = sayHello
funcType("lantian")
func sayByeBye(name : String) -> String {
return "Hello " + name
}
funcType = sayByeBye
funcType("beijing")
//sayBye("beijing")
//参数没有名字,我们需要添加一个外部参数
//1.在参数前加一个外部参数名字 注:不能在函数中使用外部参数名
//2.在参数名前加 #
func personInfo(name personName : String, #sex : String, age : String = "25") -> String {
return personName + " " + sex
}
//personInfo(name:"张三", "男")
personInfo(name: "咱三", sex: "男")
//可变参数
func sumValue(numbers : Float...) -> Float {
var sum : Float = 0.0
for number in numbers {
sum += number
}
return sum
}
sumValue(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
//如果需要用到参数运算(修改参数的值) 需要在此之前加var修饰
func hanshu (var a : Int, b : Int) {
a += 3
}
var number = 5
hanshu(number, 5)
var number1 = 5
var number2 = 3
//inout 关键字: 如果说我们改变传递的值,则需要用inout修饰变量
//传递参数的时候,要用&
func swap (inout number1 : Int, inout number2 : Int) {
var tem = number1
number1 = number2
number2 = tem
}
swap(&number1, &number2)
number1
number2
func changeValue (isOne : Bool) -> (Int -> Int) {
func plusOne(Number : Int) -> Int {
return Number + 1
}
func pluseTwo(number : Int) ->Int {
return number - 1
}
return isOne ? plusOne : pluseTwo
}
changeValue(true)
var cc : (Int -> Int) = changeValue(true)
cc(20)
func changeValue2(number : Int, isOne : Bool) -> Int {
func plusOne(number : Int) ->Int {
return number + 1
}
func plusTwo(number : Int) ->Int {
return number - 1
}
return isOne ? plusOne(number) : plusTwo(number)
}
changeValue2(24, false)
/*************************************************/
//闭包
//闭包跟OC的block一样
//{
// (参数列表)->返回值 in
// 闭包的实现
//}
var names = ["qiaoming", "kan", "taobao"]
names.reverse()
var sortedName1:() = sort(&names, {
(stringA : String, stringB : String) -> Bool in
return stringA < stringB
})
names
//去掉类型 通过类型推断自动推断出stringA stringB的类型
var sortedName2:() = sort(&names, {
(stringA, stringB) -> Bool in
return stringA < stringB
})
names
var sortedName3:() = sort(&names, {
return $0 > $1
})
// $0表示第一个数, $1表示第二个数
//数组中存放类型相同
names
var sortedName4:() = sort(&names, <)
names
/*************************************************************/
// nil Nil NULL NSNULL
// nil 指向不存在的对象指针,对对象赋空值
// Nil 指向零的类指针,对类进行赋空值
// NULL 0,对非对象指针赋空值
// NSNULL 空对象