寒城攻略:Listo 教你 25 天学会 Swift 语言 - 08 Functions

本文介绍了Swift中函数的基础概念,包括函数定义、调用、参数、返回值、参数名称、默认值、可变参数、常量参数和变量参数、输入输出参数、函数类型的应用。此外,还详细阐述了函数的高级特性,如嵌套函数和多重返回值的函数。通过实例代码解释了每个概念,帮助读者深入理解Swift函数的使用。

import Foundation


//***********************************************************************************************

//1.Functions(函数)

//_______________________________________________________________________________________________

//介绍

/*

函数是用来完成特定任务的独立代码块。给一个函数起一个适合的名字,用来标识函数是做什么的,当函数执行时,调用函数名即可

Swift 中的函数语法灵活,可以用来表示任何函数,包括从最简单的没有参数名的 C 风格函数,到复杂带局部和外部参数名的 Objective-C 风格函数。参数可以提供默认值,以简化函数调用。参数既可以当作传入参数,也可以当作传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改

 Swift 中,每个函数都有一种类型,包括函数的参数类型和返回值类型,你可以把函数类型当作任何其他普通类型一样处理,这样就可以把函数当作其他函数的参数,也可以从其他函数中返回函数。函数的定义可以写在其他函数的定义中,这样可以在嵌套函数范围内实现功能封装

*/


//***********************************************************************************************

//2.Defining and Calling Functions(定义和调用函数)

//_______________________________________________________________________________________________

//函数的定义和调用:以 func 作为前缀,返回剪头 "->" 表示函数的返回类型(func 函数名(形参) -> 返回值类型)

func sayHello(personName: String) -> String{

    let greeting = "Hello, " + personName + "!"

    return greeting

}

println(sayHello("Listo"))


//***********************************************************************************************

//1.Function Parameters and Return Values(函数的参数和返回值)

//_______________________________________________________________________________________________

//函数可以有多个输入参数

func minusResult(start: Int, end: Int) -> Int{      //函数可以有多个输入参数,在圆括号中用逗号分隔

    return end - start

}

println(minusResult(110))


//_______________________________________________________________________________________________

//无参函数

func sayHelloWorld() -> String{

    return "hello world"

}

println(sayHelloWorld())


//_______________________________________________________________________________________________

//无返回值函数(严格的来说,虽然没有定义返回值, sayGoodbye 函数依然返回了值,没有定义返回类型的函数会返回一个特殊的值,叫做 Void。他其实是一个空的元组,没有任何的元素,可以写成 ()

func sayGoodbye(name: String){

    println("Goodbye, \(name)")

}

println(sayGoodbye("Listo"))


//_______________________________________________________________________________________________

//多重返回值的函数(返回元组类型的函数)

func count(string: String) -> (vs: Int, cs: Int, os: Int) {         //定义返回值类型为元组类型

    var vowels = 0

    var consonants = 0

    var others = 0

    for character in string{

        switch String(character).lowercaseString{                   //把字符串中的字符全部转化为小写的字符串

        case "a""e""i""o""u":

            ++vowels

        case "b""c""d""f""g""h""j""k""l""m""n""p""q""r""s""t""v""w""x""y""z":

            ++consonants

        default:

            ++others

        }

    }

    return (vowels, consonants, others)

}

let total = count("some arbitrary string!")

println("\(total.vs) vowels and \(total.cs) consonants")


//***********************************************************************************************

//3.Function Parameter Names(函数的参数名)

//_______________________________________________________________________________________________

//函数参数名称(局部参数名和外部参数名)

func join(s1: String, s2: String, joiner: String) -> String{        //此时 s1s2joiner 都是内部参数名,只能在函数的内部进行使用

    return s1 + joiner + s2

}

println(join("hello""world"","))        //内部参数名对应的不足是在调用函数的时候,我们没法知道调用函数实参的具体含义


func join1(string s1: String, toString s2: String, withJoiner joiner: String) -> String{        //使用 string,toString,withJoiner 三个名称给函数内部形参命名作为外部参数名,可以在函数的外部进行使用

    return s1 + joiner + s2

}

println(join1(string: "hello", toString: "world", withJoiner: ","))     //我们在调用函数的时候,使用外部参数名可以更明显的说明实参的含义


//_______________________________________________________________________________________________

//简写外部参数名(当外部参数名和内部参数名相同的时候,可以在局部参数名前面加上 "#" 来说明这个参数名是外部参数名和局部参数名

func join2(#string: String, #toString: String, #withJoiner: String) -> String{

    return string + withJoiner + toString

}

println(join2(string: "hello", toString: "world", withJoiner: ","))


//_______________________________________________________________________________________________

//函数参数默认值

func join3(#string: String, #toString: String, withJoiner: String = ",") -> String{     //在设置函数参数时为参数设置默认值,在函数调用的时候可以不指定函数的实参,当设置默认值时,这个参数自动转化为外部参数名,在调用的时候必须声明外部参数名

    return string + withJoiner + toString

}

println(join3(string: "hello", toString: "world", withJoiner: "-"))     //如果在调用函数的时候修改形参默认值,保留修改后的值


//_______________________________________________________________________________________________

//可变参数(当参数的数量不确定时,使用可变参数命名参数即可,一个函数最多能有一个可变参数,可变参数必须在参数的最后位置)

func airtheticMean(numbers: Double...) -> Double{

    var total: Double = 0

    for number in numbers{

        total += number

    }

    return total / Double(numbers.count)

}

println(airtheticMean(1.23.54.6))


//_______________________________________________________________________________________________

//常量参数和变量参数(函数参数默认为常量,如果需要在函数中修改参数,就要定义变量参数)

func alignRight(var string:String, count: Int, pad:Character) -> String{     //设置参数 string为变量参数,在函数内部可以修改参数

   let amountToPad = count - countElements(string)         //使用 "countElements"函数获取字符串长度

   let padString = String(pad)

   for _ in 1...amountToPad{

        string = padString + string

    }

   return string

}

let originalString ="hello"

let paddedString =alignRight(originalString,10, "_")

println("originalString: " +originalString)

println("paddedString: " +paddedString)


//_______________________________________________________________________________________________

//输入输出参数(变量参数仅仅在函数体内被更改,如果想要一个函数可以修改参数的值,并且想要在函数调用结束之后依旧存在,那么就应定义输入输出参数)

func swapTwoInts(inout a: Intinout b: Int){       //使用 inout 函数来定义输入输出参数,输入输出参数不能有默认值,可变的参数不能用 inout 标记

    let temp = a

    a = b

    b = temp

}

var someInt = 3

var anotherInt = 8

swapTwoInts(&someInt, &anotherInt)         //在调用函数时,当传入的参数作为输入输出参数的时候,在参数前加上 & ,表示这个值可以被函数修改

println("someInt is now \(someInt), another is now \(anotherInt)")


//***********************************************************************************************

//4.Function Types(函数类型)

//_______________________________________________________________________________________________

//函数类型的写法分为三步:1.定义函数; 2.声明函数类型变量或者常量; 3.给函数类型变量赋值

func addTwoInts(a: Int, b: Int) -> Int{         //定义函数

    return a + b

}


var mathFunction: (IntInt) -> Int            //声明函数类型变量


mathFunction = addTwoInts                      //给函数类型变量赋值


println("result: \(mathFunction(23))")       //输出函数类型的变量


//_______________________________________________________________________________________________

//函数类型作为参数类型

func printMathResult(mathFun: (IntInt) -> Int, a: Int, b: Int){

    println("Result: \(mathFun(a, b))")

}

printMathResult(mathFunction47)


//_______________________________________________________________________________________________

//函数类型作为返回类型

func stepForward(input: Int) -> Int{

    return input + 1

}

func stepBackward(input: Int) -> Int{

    return input - 1

}

func chooseStepFunction(backward: Bool) ->  (Int) -> Int{     //声明 chooseStepFunction 函数返回函数类型数据,返回类型为 (Int) -> Int

    return backward ? stepBackwardstepForward     //返回函数类型

}


var currentValue = 3

let moveNearerToZero = chooseStepFunction(currentValue > 0)         //此时 moveNearerToZero  stepBackward 函数

println("moveNearerToZero: \(moveNearerToZero(10))")


//_______________________________________________________________________________________________

//嵌套函数

func chooseStepFunction1(backward: Bool) -> ((Int) -> Int){

    func stepForward1(input: Int) -> Int{

        return input + 1

    }

    func stepBackward1(input: Int) -> Int{

        return input - 1

    }

    return backward ? stepBackward1stepForward1     //返回函数类型

}

var currentValue1 = 8

let moveNearerToZero1 = chooseStepFunction1(currentValue > 0)         //此时 moveNearerToZero  stepBackward 函数

println("moveNearerToZero: \(moveNearerToZero1(10))")


转载:http://blog.youkuaiyun.com/u013096857/article/details/37871237

内容概要:本文系统梳理了2025年数学前沿领域的研究动态与发展趋势,涵盖代数几何、数论、微分几何、拓扑学、偏微分方程、数学物理等多个核心方向,并介绍了当前国际数学研究的三大主流趋势:代数几何与数论、分析与偏微分方程、几何拓扑与表示论。文中重点报道了青年数学家王虹成功证明三维挂谷猜想的重大突破,以及韦东奕在偏微分方程与几何分析方面的研究成果,展现了中国数学界的崛起态势。同时,文档还涉及数学基础研究、应用数学、数学育、期刊评价体系及国际数学强国格局等内容,引用大量视频、文章和权威资源,呈现数学学科的全貌与发展前景。; 适合人群:具备一定数学基础的本科生、研究生及科研工作者,关注数学前沿发展的师、科技爱好者以及从事人工智能、物理、工程等相关领域并需数学支撑的专业人士。; 使用场景及目标:①了解2025年数学领域的重要突破与研究热点,如挂谷猜想的证明、朗兰兹纲领、拓扑数据分析等;②把握数学各分支的前沿方向与交叉应用,服务于科研选题、学术规划或跨学科研究;③获取权威学习资源与经典文献推荐,辅助数学学习与学实践。; 阅读建议:此文档为信息聚合型资料,建议结合所列视频、书籍和论文深入拓展学习,重点关注核心突破案例(如王虹、韦东奕)与主流研究方向的演进脉络,宜以批判性思维梳理知识体系,避免碎片化阅读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值