// Playground - noun: a place where people can play

import UIKit

// 定义和调用函数
func sayHello(personName : String) -> String {
let greeting = "hello, " + personName + "!" return greeting
} println(sayHello("Anna")) // 方法参数与返回值
// 1. 多个参数
func halfOpenRangeLength(start : Int, endRange end : Int) -> Int {
return end - start
} println(halfOpenRangeLength(, endRange: )) // 2. 无参数
func sayHelloWorld() -> String {
return "hello, world"
} println(sayHelloWorld()) // 3. 无返回值
func sayGoodbye(personName: String) -> Void {
println("goodbye, \(personName)!")
}
//func sayGoodbye(personName: String) {
// println("goodbye, \(personName)!")
//}
//func sayGoodbye(personName: String) -> () {
// println("goodbye, \(personName)!")
//}
sayGoodbye("Anna") // 4. 多个返回值
func queryTupleReturnValue() -> (first : Int, second : Int) {
return (, )
} let bounds = queryTupleReturnValue()
println("first is \(bounds.first), second is \(bounds.second)") // 5. 返回多个可选值[整体可选,非单个元素是optional]
func optionalTupleValue() -> (first : Int, second : Int)? {
return (, )
} if let optionalTuple = optionalTupleValue() {
println("optional: first is \(optionalTuple.first), second is \(optionalTuple.second)")
} // 方法参数名
// 1. 外部参数名[目的是调用方法时可以更加清晰的看到每个参数的作用]
func join(string s1 : String, toString s2: String, withJoiner joiner : String) -> String {
return s1 + joiner + s2
} join(string: "hello", toString: "world", withJoiner: ",") // 每一个参数的涵义更加明确 // 2. 标记外部参数名和参数名一致 #
func containsCharacter(#string : String, #characterToFind : Character) -> Bool {
for character in string {
if character == characterToFind {
return true
}
}
return false
} containsCharacter(string: "fsafh", characterToFind: "s") // 3. 参数默认值[为参数指定默认值,在调用方法时可以忽略该参数]
func joinWithDefaultJoiner(string s1 : String, toString s2 : String, withJoiner joiner : String = " ") -> String {
return s1 + joiner + s2
}
joinWithDefaultJoiner(string: "hello", toString: "world", withJoiner: ",")
joinWithDefaultJoiner(string: "hello", toString: "world") // 4. 有默认值参数的外部参数名[为了清晰的看到已有默认值的参数在方法调用时调用者是否提供了值,swift会自动为友默认值的参数生成外部参数名,相当于在参数名前默认添加 #]
func joinWithAutoExternalName(s1 : String, s2 : String, joiner : String = " ") -> String {
return s1 + joiner + s2
} joinWithAutoExternalName("hello", "world", joiner: "-") // 5. 可变形参[参数在方法内部相当于array,类型由形参类型决定]
func arithmeticMean(numbers : Double...) -> Double {
var total : Double =
for number in numbers {
total += number
} return total / Double(numbers.count)
} arithmeticMean(, , , , ) // numbers 相当于 [1, 3, 5, 8, 10]
// 注意: 一个方法里最多只能存在一个变长参数,并且应该被放在参数列表的最后面 // 6. 常量和变量参数[默认情况下,方法内的参数都是常量(let),无法在方法内部进行改变。 使用var定义可变参数]
func modifyParameter(var string : String) -> String {
string += "-modified" // 试图修改使用默认let的参数会报错
return string
} modifyParameter("hello") // 7. 方法内修改外部变量
func modifyOutVar(inout string : String) -> String {
string += "modified by func"
return string
} var string = "to modify"
modifyOutVar(&string)
println("modify: \(string)")
// 注意: 1.in-out 参数不能设置默认值 2.变长参数不能成为in-out参数 3.in-out参数不能使用let或者var 4. 传入in-out参数时,传的是地址 // 方法类型
func addTwoInts(a : Int, b : Int) -> Int {
return a + b
}
// 上面方法类型为 (Int, Int) -> Int
func printHelloWorld() {
println("hello, world")
}
// 上面方法类型为 () -> () 或者 () -> Void // 1. 使用方法类型
var mathFunction : (Int, Int) -> Int = addTwoInts
mathFunction(, ) // 2. 方法类型作为参数
func printMathResult(mathFunction : (Int, Int) -> Int, a : Int, b : Int) {
let result = mathFunction(a, b)
println("result:\(result)")
} printMathResult(mathFunction, , ) // 3. 方法类型作为返回值
func stepForward(input : Int) -> Int {
return input +
} func stepBackward(input : Int) -> Int {
return input -
} func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
return backwards ? stepBackward : stepForward
} // 调用
var currentValue =
let moveNearerToZero = chooseStepFunction(currentValue > )
while currentValue != {
println("currentvalue: \(currentValue)")
currentValue = moveNearerToZero(currentValue)
}
println("zero") // 4. 嵌套函数
func anotherChooseStepFunction(backwards: Bool) -> (Int) -> Int { func stepForward(input : Int) -> Int {
return input +
} func stepBackward(input : Int) -> Int {
return input -
}
return backwards ? stepBackward : stepForward // 使用与前面一样
}

Swift-6-函数的更多相关文章

  1. Swift(三.函数)

    一.swift中的函数分为以下几类吧 1>无参无返   2>无参有返 3>有参无返  4>有参有返  5>有参多返 二.看下面几个例子吧 1>无参无返 func a ...

  2. Swift 语言函数

    import Foundation // 函数声明于实现 func sayHello(name){ print("Hello \(name)") } // 函数调用 sayHell ...

  3. swift 之 函数

    swift的函数跟脚本语言有很多神似之处. 如果有一天用swift开发服务器 ,很期待哇(一切皆有可能,毕竟人家说要跑在Linux上),

  4. Swift 中函数使用指南

    关于Swift中的各种函数的使用的总结 前言 时间久了,好多东西我们就会慢慢忘记,在这里总结一下Swift中函数的使用原则,把大部分的函数使用技巧用代码示例来做了演示,但是如果想提高,还是要多多思考才 ...

  5. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  6. 你需要知道的swift必备函数 map

    map这东西在oc中并未用过,但是swift在处理数组的时候显得格外的游刃有余,这归功于map这个函数: map函数  arr.map(<#T##transform: (Int) throws ...

  7. Swift:函数和闭包

    函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数一样有函数的参数和返回值,而且还支持嵌套,并且有函数参数默认值.可变参数等. //定义一个函数,注意参数和返回值,如果没 ...

  8. 窥探 Swift 之 函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候 都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小 ...

  9. Swift学习——A Swift Tour 函数

    Functions and Closures  函数和封闭性(闭包) Functions  函数的使用 Swift中的函数定义和OC中有明显的差别了,使用func定义函数,在括号里定义參数和类型,用 ...

  10. Swift - 自定义函数规则说明

    1,无返回值的函数 1 2 3 func test(name:String){   } 2,返回一个返回值 1 2 3 func test(name:String) -> Bool{     r ...

随机推荐

  1. 条件放在left join后面和where后面

    有这样一个查询的差异: 两张表如下: 语句在这里: create table #AA ( ID int, Name nvarchar() ) insert into #AA ,'项目1' union ...

  2. 在CentOS6.5下安装Memcached

    CentOS 6.5 安装软件非常方便, yum install memcached

  3. [terry笔记]物化视图 materialized view基础学习

    一.物化视图定义摘录:     物化视图是包括一个查询结果的数据库对像(由系统实现定期刷新数据),物化视图不是在使用时才读取,而是预先计算并保存表连接或聚集等耗时较多的操作结果,这样在查询时大大提高了 ...

  4. python自学笔记一

    之前看过一段时间的小甲鱼零基础自学python,b站上有高清免费资源[av4050443],但是作为零基础实在学得艰难,下载了python核心编程pdf,在这里做一些笔记. 虽然使用的是第二版的教材, ...

  5. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  6. 安装MySQL的心得

    1.去官网上下载适合自己电脑的安装包,最好在网上查查教程起码知道自己应该怎么下载,下载哪一个. 2.我遇到的问题不多:<1>.没在bin目录下安装,启动数据库时出现错误2:<2> ...

  7. hdu 4217 Data Structure?/treap

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4217 可用线段树写,效率要高点. 这道题以前用c语言写的treap水过了.. 现在接触了c++重写一遍 ...

  8. ios多线程的几种创建方式以及基本使用

    1.第一种,NSThread方法,此方法使用很少! 2.NSOperation,面向对象的多线程技术 3. NSObject多线程技术 4.苹果推荐使用的GCD技术 5.GDC中的队列

  9. Linux下安装MySQLdb模块

    1,查看是否已安装MySQLdb模块 进入python的命令行,输入 import MySQLdb 如果没有报错,证明此模块已经安装,可以跳过以下步骤. 2,下载最新的MySQLdb安装包: wget ...

  10. WordPress实现长篇文章/日志/单页面分页功能效果

    在WordPress里写文章,如果内容很多,你可能想要把文章分成几页来让访客浏览,这样既保持了网页的美观,也提高了网页的打开速度.但是在WordPress默认提供的按钮里,你可能找不到文章分页功能所对 ...