//***********swift学习之15--函数--***************************

/*

Swift 定义函数使用关键字 func,由函数名、参数、返回值组成。参数和返回值甚至可以是元组、带返回值的函数等

*/

// 1.1 不带参数

func nullParame() -> String {

return "不带参数的函数!"

}

var valueStr:String? = nullParame()

print(valueStr!)

// 1.2 有入参的函数

// 例如:求圆的面积

func areaOfCircle(radius:Float) -> Float {

let pai:Float = 3.14

return 2*pai*radius*radius

}

areaOfCircle(radius: 4)

// 例如:求矩形的面积

func areaOfRectangle(width:Float,height:Float) -> Float {

return width*height

}

areaOfRectangle(width: 5.1, height: 4)

// 1.3 元组作为函数返回值

// 例如:定义了一个名为minMax(_:)的函数,作用是在一个Int数组中找出最小值与最大值。

// minMax(_:)不会对传入的数组执行任何安全检查,如果array参数是一个空数组,如上定义的minMax(_:)在试图访问array[0]时会触发一个运行时错误。为了安全地处理这个"空数组"问题,将minMax(_:)函数改写为使用可选元组返回类型,并且当数组为空时返回nil

func minMax(array:[Int]) -> (min:Int,max:Int)? {

if array.isEmpty { return nil }   // 返回的元祖这是可能为nil,应为optional,加"?"

var temMin:Int = array[0]

var temMax:Int = array[0]

for temVule in array[1..<array.count] {

if temVule < temMin {

temMin = temVule

} else if temVule > temMax {

temMax = temVule

}

}

return (temMin,temMax)

}

var testArray:[Int] = [2,9,-6,16,7,20,23,4]

var temTuble = minMax(array: testArray)

print("\(testArray) 中最小值为:\(temTuble!.0) 最大值为:\(temTuble!.1)")

let responseStatus = (status:200,result:["message":"请求成功","data":["usr":"李振振","memberId":"2046"]])

print("元组的练习:status:\(responseStatus.status) result:\(responseStatus.1)")

// 如果你不确定返回的元组一定不为nil,那么你可以返回一个可选的元组类型。

// 你可以通过在元组类型的右括号后放置一个问号来定义一个可选元组,例如(Int, Int)?或(String, Int, Bool)?

// 注意

// 可选元组类型如(Int, Int)?与元组包含可选类型如(Int?, Int?)是不同的.可选的元组类型,整个元组是可选的,而不只是元组中的每个元素值。

// 1.4 外部参数名

// 你可以在局部参数名前指定外部参数名,中间以空格分隔,外部参数名用于在函数调用时传递给函数的参数。

// 如下定义以下两个函数参数名并调用它:

func pow(OutParame1 a:Int,outParame2 b:Int) -> Int {

var res = a

for _ in 1..<b {

// 为啥用“_”,因为没有使用的所以用“_”,代替。排除⚠️

res = res*a

}

print(res)

return res

}

pow(OutParame1: 5, outParame2: 3)

// 注意:如果你提供了外部参数名,那么函数在被调用时,必须使用外部参数名。

// 1.5 可变参数

// 可变参数可以接受零个或多个值。可变参数形式:变量类型名后面加入(...)

//func testVaryParames(members: AnyObject...) {

//    for i in members {

//        print(i)

//    }

//}

func testVaryParames<N>(members: N...) {

for i in members {

print(i)

}

}

testVaryParames(members: 4,3,5)

testVaryParames(members: 4.5, 3.1, 5.6)

testVaryParames(members: "Google", "Baidu", "Runoob")

// 1.6 常量,变量及 I/O 参数

// 一般默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。如果想要声明一个变量参数,可以在前面加上var,这样就可以改变这个参数的值了。

// 例如:

func swapTwoInts( a:Int, b:Int){

var a = a

var b = b

let t = a

a = b

b = t

}

var x = 0,y = 100

print("x = \(x) ;y = \(y)")

swapTwoInts(a: x, b:y)

print("x = \(x) ;y = \(y)")

// 变量参数,正如上面所述,仅仅能在函数体内被更改。如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。

func swapTwoIntsInout( a:inout Int, b:inout Int) {

let t = a

a = b

b = t

}

var m = 0,n = 100

print("m = \(m) ;n = \(n)")

swapTwoIntsInout(a: &m, b:&n)

print("m = \(m) ;n = \(n)")

// 1.7 函数类型

// 每个函数都有种特定的函数类型,由函数的参数类型和返回类型组成。

// 在 Swift 中,函数可以像其他类型一样。例如,你可以定义一个类型为该函数的常量或变量,并将适当的函数赋值给它:

func sum(m:Int, n:Int) -> Int {

return m+n

}

var addtiona:(_ a:Int, _ b:Int) -> Int = sum  // 获取sum的函数类型

print("输出结果:    \(addtiona(10,14))")

// 1.8 由上节知道函数可以赋值一个类型为该函数的常量或变量(addtiona)。实际上就是变量的功能。作为函数的参数或返回值的作用。

// 也就是函数类型作为参数类型、函数类型作为返回类型

// 接着 1.7 的例子

func another(testSum: (Int, Int) -> Int, a: Int, b: Int) {

print("输出结果: \(testSum(a, b))")

}

another(testSum: sum, a: 10, b: 20)

// 1.9 函数嵌套

// 指的是函数内定义一个新的函数,外部的函数可以调用函数内定义的函数。

func calcDecrement(forDecrement total: Int) -> Int {

var overallDecrement = 0

func decrementer() -> Int {

overallDecrement -= total

return overallDecrement

}

let hhh:(()->Int) =  decrementer

// decrementer 函数类型 decrementer() 为函数调用

return hhh()

}

let decrem = calcDecrement(forDecrement: 30)

print(decrem)

swift_015(Swift 的函数)相关推荐

  1. Swift 泛型函数补充

    Swift 泛型函数[中文参考文档] 泛型使用的基本原则,执行时候需要知道具体泛型类型,即要么通过参数确定类型,要么通过返回值推导类型. 参考文档中已经给出来基本的泛型使用.基本都是通过参数去定类型 ...

  2. Swift之函数的语法和使用 | CSDN创作打卡

    一.函数简介 Swift 函数用来完成特定任务的独立的代码块. Swift 使用一个统一的语法来表示简单的 C 语言风格的函数到复杂的 Objective-C 语言风格的方法: 函数声明:告诉编译器函 ...

  3. Swift之函数的语法分析和使用示例

    一.函数简介 Swift 函数用来完成特定任务的独立的代码块. Swift 使用一个统一的语法来表示简单的 C 语言风格的函数到复杂的 Objective-C 语言风格的方法: 函数声明:告诉编译器函 ...

  4. Swift -- 6.函数和闭包

    函数 /* 函数分为函数名,参数,返回值,执行代码块四部分 有返回值函数可以作为一个值直接在print里输出 */ //函数定义 func max(a:Int, b:Int, c:Int) -> ...

  5. Swift 的函数和闭包

    函数的关键字是 func ,函数定义的格式是: func funcName(para:paraType) -> returnType{// code } 复制代码 函数的参数标签 其中参数的那部 ...

  6. Swift - 26 - 函数的基础写法

    //: Playground - noun: a place where people can playimport UIKit// 无参无返回 // -> Void可以省略不写, 或者写成() ...

  7. Welcome to Swift (苹果官方Swift文档初译与注解三十四)---241~247页(第五章-- 函数)

    In-Out Parameters (全局参数) 像前面描述的参数变量,只能在函数体内进行修改,如果你需要函数修改的它的参数值,并且希望这些改变在函数调用结束后仍然有效,可以定义使用全局参数. 定义全 ...

  8. Swift和Java在函数(method/方法)方面的比较

    1. 函数是用来完成特定任务的独立的代码块.Swift中函数的使用比Java中更灵活,在 Swift 中,可以把函数当做别的函数的参数,也可以从其他函数中返回函数.函数的定义可以写在在其他函数定义中, ...

  9. Swift中文教程(六)函数

    函数是执行特定任务的代码自包含块.给定一个函数名称标识, 当执行其任务时就可以用这个标识来进行"调用". Swift的统一的功能语法足够灵活来表达任何东西,无论是甚至没有参数名称的 ...

最新文章

  1. python项目实例代码-python开源项目及示例代码
  2. 170318 11:44:26 [ERROR] Can't start server: can't create PID file: No space left on device
  3. 使用 kafka 提升你的订单接口吞吐量
  4. hdu-1438 钥匙计数之一
  5. C#中new和override的区别
  6. (129)System Verilog限制建仓方法
  7. linux 权限mod,linux学习—权限管理
  8. 进入全屏 nodejs+express+mysql实现restful风格的增删改查示例
  9. PHP微信公众号支付弹出“NaN:undefined”解决方法
  10. 关于在CLASSWIZARD中找不到工作区间中的类的解决方法
  11. Cisco基础(六):配置目前网络环境、项目阶段练习
  12. 带视频加密功能的视频播放器
  13. JavaSE 简单介绍
  14. [system] Map key not configured.
  15. MVC实现局部视图刷新
  16. java中类成员的限定词_JAVA中类成员的限定词有以下几种、private ,public ,
  17. 基于fastdfs-zyc搭建分布式监控系统
  18. 分享几种web无插件视频播放方式
  19. SpringBoot的旅游系统毕业设计分享和讲解
  20. C语言实现学生成绩管理系统(EasyX图形界面)

热门文章

  1. Jupyter on Kubernetes机器学习-MLflow
  2. 遇见requestAnimationFrame
  3. zabbix-3.0.4添加对windows 2008r2的监控
  4. Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)
  5. mysql事务的四大特性与简单运用
  6. 设为首页 收藏(IE可用)
  7. mac easy_install 安装插件失败
  8. 网站安全--又一种防盗链的措施!
  9. 【原创·教程·连载】Microsoft SQL Server 2008 Reporting Services应用系列(一)安装篇...
  10. D3-栈[Java数据结构和算法]