swift学习笔记之-函数
//函数
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学习笔记之-函数的更多相关文章
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Swift学习笔记(8)--函数
1.定义及调用 func sayHelloAgain(personName: String) -> String { return "Hello again, " + per ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Matlab学习笔记 figure函数
Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...
- matlab学习笔记 bsxfun函数
matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- Swift学习笔记(14)--方法
1.分类 方法分为实例方法和类型方法 实例方法(Instance Methods):与java中的类似,略 类型方法(Type Methods):与java.oc中的类方法类似.声明类的类型方法,在方 ...
- matlab学习笔记13_1 函数返回值
一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
随机推荐
- Linux进程通信 之 信号灯(semphore)(System V && POSIX)
一. 信号灯简介 信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制. 相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程 也可以修改该标志.除了用于访 ...
- POJ 1650 Integer Approximation
Integer Approximation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5081 Accepted: ...
- Warning: Multiple build commands for output file /xxx
xcode中 有时候会报一个警告: [WARN]Warning: Multiple build commands for output file /xxx 要解决这个问题很简单: 1.选择你的工程 2 ...
- Visual Studio 2013开启JavaScript的智能提示功能
在前一次的发布的时候,我们共享了Visual Studio 2013中Windows Azure移动服务的集成和功能.其中包含了移动服务表脚本的编辑能力的介绍.这一次的发布,我们将描述在Visual ...
- gulpfile.js 合并压缩 requirejs 的配置文件
var gulp = require("gulp"); // var babel = require("gulp-babel"); // 用于ES6转化ES5 ...
- 组合模式及C++实现
组合模式 组合模式,是为了解决整体和部分的一致对待的问题而产生的,要求这个整体与部分有一致的操作或行为.部分和整体都继承与一个公共的抽象类,这样,外部使用它们时是一致的,不用管是整体还是部分,使用一个 ...
- Teambition可用性测试记
引言:最开始知道Teambition是几个月前,当时是想找一个团队协作工具.Teambition是候选之一,它的界面设计给我留下了印象.后来得知其背后年轻的创始团队还是让我有些小惊讶的.这次通过朋友介 ...
- 左倾堆(二)之 C++的实现
概要 上一章介绍了左倾堆的基本概念,并通过C语言实现了左倾堆.本章是左倾堆的C++实现. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的C++实现(完整源码)4. 左倾堆的C++测试程序 ...
- 探索jdk8之ConcurrentHashMap 的实现机制
在介绍ConcurrentHashMap源码之前,很有必要复习下java并发编程中的一些基础知识,比如内存模型等. 存储模型 并发编程中的三个概念 1.原子性 2.可见性 3.重排序 对HashMap ...
- 说说jsonp
什么是jsonp jsonp充其量只能说是一种"方法".它可以让页面从其他域中获取资料. 首先要知道的是同源策略,在javascript中使用http请求(ajax)是会受到同 ...