//函数

import UIKit

/*获得系统时间

var date = NSDate()

var timeFormatter = NSDateFormatter()

timeFormatter.dateFormat = "MM:dd" //(格式可俺按自己需求修整)

var strNowTime = timeFormatter.stringFromDate(date) as String

print(strNowTime)

*/

/*===函数是用来完成特定任务的独立的代码块====

1.没有定义返回类型的函数会返回特殊的值,叫 Void。它其实是一个空的元组(tuple),没有任何元素,可以写成()。

2.将带有默认值的参数放在函数参数列表的最后

3.一个函数最多只能有一个可变参数

4.如果函数有一个或多个带默认值的参数,而且还有一个可变参数,那么把可变参数放在参数表的最后

5.函数参数默认是常量,想要修改参数值必须声明为变量

6.对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中

输入输出参数(In-Out Parameters):

1.在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值

2.当传入的参数作为输入输出参数时,在调用该参数时需要在参数名前加&符,表示这个值可以被函数修改

3.输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记

4.输入输出参数是函数对函数体外产生影响的另一种方式。输入输出参数和返回值是不一样的,但仍然修改了原来的值

全局函数(global functions):定义在全局域中

嵌套函数(nested functions):把函数定义在别的函数体中,默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。

*/

//函数应用1: 找出整型数组中的最大值、最小值、平均值

var num1 = [-10,-9,-8,-7,-6,-5,-4,-3,-2,-1]

var num2 = [1,2,3,4,5,6,7,8,9,10]

var num3 = [333,444,555,666,777,888]

//num1 = []

//num2 = []

func minmax(a ray1:[Int],var b ray2:[Int],inout c ray3:[Int]) ->(min:Int,max:Int,pingjun:Double)?{

//ray1 = [2,4,6] 由于函数参数默认是常量,所以无法修改ray1参数

ray2 = [33] //参数ray2声明为变量,可以在函数体内临时修改传入的值,但不改变实际参数的值

ray3 = [69,3,4]  //参数ray3是一个inout参数,这个实际参数传入的值将通过函数改变,然后传出函数,并替换原来的值,调用时需在参数前加&号

if ray1.isEmpty == true || ray2.isEmpty == true{return nil}

var minNumber = 0

var maxNumber = 0

var pingjunzhi = 0.00

var total = 0

var ray = ray1 + ray2 + ray3

if ray.count == 0{

return nil

}

for x in ray[0..<ray.count] {

total += x

if x<minNumber{

minNumber=x

}

if x>maxNumber{

maxNumber=x

}

}

pingjunzhi = Double(total/ray.count)

return (minNumber,maxNumber,pingjunzhi)

}

if var a = minmax(a:num1,b:num2,c:&num3){

print("在整型数组\(num1)、\(num2) 和修改后的 \(num3)中\n最小值是:\(a.min),最大值是:\(a.max),平均值是:\(a.pingjun)")

}else{

print("所有数组为空,无法找出")

}

//求所有数组里面的所有数据的平均值(函数参数个数可变)

func pingjunzhi(arrays:[Int]...)->Int? {

if arrays.isEmpty == true {

print("没有任何数据!")

return nil

}

var total = 0

var m = 0

for array in arrays[0..<arrays.count]{

if array.isEmpty == true {

print("有部分数组为空!",terminator:" ")

continue

}

m += array.count

for numbers in array[0..<array.count]{

total += numbers

}

}

//var result = total/m

//print("所有数组数据的平均值为:\(total/m)")

return total/m

}

var num4 = [9999,1,1,1,1,5]

num4 = []

if var qq = pingjunzhi(num1,num2,num4){

print("所有数组数据的平均值为:\(qq)")

}

//函数应用2: 函数类型应用、嵌套函数

//+-*/%运算函数addition subtraction multiplication division rermainder

func arithmetic(yunsuanfu:String)->(a:Int...)->Int{

func average(a:Int...)->Int{

var result = 0

for x in a{

result += x

}

return result/a.count

}

func addition(a:Int...)->Int{

var result = 0

for x in a{

result += x

}

return result

}

/*

func substraction(){

for x in numbers[1..<numbers.count]{

result -= x

}

}

func multiplication(){

for x in numbers[1..<numbers.count]{

result *= x

}

}

func division(){

for x in numbers[1..<numbers.count]{

result /= x

}

}

func rermaider(){

for x in numbers[1..<numbers.count]{

result %= x

}

}

*/

switch yunsuanfu{

case "aver":return average

case "+":return addition

default: break

}

return average

}

var tt = arithmetic("+")

print("结果:\(tt(a:1,2,3,4,10))")

func sumOfNumbers(str: String = "1", _ numbers: Int...) -> Int {  //第一个参数默认为外部参数名,第二和之后为内外部名,“_”可省略其外部名调用他

var total: Int = 0

if let num = Int(str) {

total += num

}

for number in numbers {

total += number

}

return total

}

sumOfNumbers("5",1,2,3)

swift学习笔记之-函数的更多相关文章

  1. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  2. Swift学习笔记(8)--函数

    1.定义及调用 func sayHelloAgain(personName: String) -> String { return "Hello again, " + per ...

  3. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  4. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  5. matlab学习笔记 bsxfun函数

    matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...

  6. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  7. Swift学习笔记(14)--方法

    1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...

  8. matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...

  9. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

随机推荐

  1. Flash Media Server 4.5 序列号 (fms4.5 激活码)

    激活码一枚   ,网上找不到的..我今天放出来了哦... 1462-5864-7783-6034-8316-3718    (亲测 可用) 安装前找到系统盘下windows/system32/driv ...

  2. 通过 Storyboard 快速搭建一系列连贯性的视图控制器

    此例子只是一个简单的 Demo,这里没有过多介绍如何去实现,网上有很多关于 Storyboard 技术的介绍,请自行搜索. 效果如下: iPhone 5s   iPhone 6   iPhone 6 ...

  3. 新浪微博OAuth2.0的用法

    最近学习Android开发,照着视频开发新浪微博,但是视频里的介绍的是OAuth1.0的授权方式,试了半天发现用不了. 原来现在一般没审核的用户只能使用OAuth2.0了,视频教学里的方法已经过时了. ...

  4. AngularJS的学习--TodoMVC的分析

    最近一段时间一直在看AngularJS,趁着一点时间总结一下. 官网地址:http://angularjs.org/ 先推荐几个教程 1. AngularJS入门教程 比较基础,是官方Tutorial ...

  5. 受限玻尔兹曼机(RBM)学习笔记(五)梯度计算公式

      去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算 ...

  6. 创意欣赏:20幅字体排版(Typography)素描

    通常我们都只关注最终的作品,但其实幕后还有很多的过程,其中一个是素描.素描用来表达最初思想观念的原型.有时客户需要一个独特的品牌新LOGO或字体,这时先绘制在纸上是比较方便的,之后扫描到 Photos ...

  7. VM不能连入局域网

    如果选了Host-only,那么虚拟机与跑虚拟机的宿主就无法连通了. 可以选用Bridged模式,那么虚拟机与跑虚拟机的主机连通了

  8. 使用autotools系列工具自动部署源代码编译安装

    在Linux系统下开发一个较大的项目,完全手动建立Makefile是一件费力而又容易出错的工作.autotools系列工具只需用户输入简单的目标文件.依赖文件.文件目录等就可以比较轻松地生成Makef ...

  9. php的SAPI,CLI SAPI,CGI SAPI

    首先一个问题:在命令行下执行:php -r 'echo 12;' 控制台会打印出 12: 这个过程不是很奇妙么,我输入的是shell命令,但是执行的却是php脚本.php脚本执行完成之后的输出还能在控 ...

  10. IOS中图片加载的一些注意点

    图片的加载: [UIImage imageNamed:@"home"] //加载 png图片 在ios中获取一张图片只需要写图片名即可 不需要写后缀 默认都是加载.png的图片 但 ...