Swift学习(函数篇)

//函数
//函数定义
/*
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 空对象


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值