//函数

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. 算法导论第十八章 B树

    一.高级数据结构 本章以后到第21章(并查集)隶属于高级数据结构的内容.前面还留了两章:贪心算法和摊还分析,打算后面再来补充.之前的章节讨论的支持动态数据集上的操作,如查找.插入.删除等都是基于简单的 ...

  2. Log4j配置说明及样例

    一般的应用都会记录日志,Java圈里面用得最多就属log4j了,比较规范一点就是使用log4j.xml进行配置Log输出.这里就比较有疑问,多数情况是使用log4j.properties文件呐,前面也 ...

  3. 挑选分组中top1

    select * from( select *, ROW_NUMBER() over(partition by accountid order by opentime DESC) as rowNumf ...

  4. iOS开发中一些常见的并行处理(转)

    本文主要探讨一些常用多任务的最佳实践.包括Core Data的多线程访问,UI的并行绘制,异步网络请求以及一些在运行态内存吃紧的情况下处理大文件的方案等.

其实编写异步处理的程序有很多坑!所以,本文 ...

  5. 《Programming with Objective-C》第八章 Working with Blocks

    Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDicti ...

  6. ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误

    今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...

  7. ArcGIS Server注册地理数据库报machine:机器名[Oracle:(null)]错误的修改

    环境介绍:本机安装了ArcGIS Server10.2,ArcGIS Desktop10.2,64位Oracle11g以及Oracle32位客户端.直连和服务连接都能成功. 问题:我要进行服务发布的时 ...

  8. vs2013update4 vs-mda-remote cordova真机测试ios

    1.升级vs2013到update4 2.下载安装vs_langpack-enu英语语言包 3.下载安装vs2013mda目前版本0.3.1 如果开发andorid,需要android sdk,ant ...

  9. 使用命令行备份指定文件夹并保留最新N份

    客户需要对网站进行定期备份,并保留最近30天的文件,编写后以下脚本,通过Windows的任务计划进行调度 对比手工和任务计划调度运行情况来看,手工运行中可直接调用RAR.exe和网络进行传输,但是任务 ...

  10. iOS-布局-Masonry

    一.说明:demo中的举例视图介绍  UIView        *_blackView;     作为父视图  UIView        *_redView;       与父视图内边距为10   ...