// 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. js数组的内部实现,迭代器,生成器和内包

    js内部实现 在js以外的很多语言中,数组将会隐式占用一段连续的内存空间.这种隐式的内部实现,使得高效的内存使用及高速的元素方法称为可能,而 在javascript中,数组实体是一个对象,所以通常的实 ...

  2. 算法系列2《RSA》

    1. RSA介绍 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响 ...

  3. spring中scope(作用越)理解

    今天总结了一下spring中作用域scope的用法.在spring中作用域通过配置文件形式的用法如下. <bean id="role" class="spring. ...

  4. oracle 查询谁在用undo

    SELECT TO_CHAR(s.sid)||','||TO_CHAR(s.serial#) sid_serial,NVL(s.username, 'None') orauser,s.program, ...

  5. ios中怎么样判断路径最后的后缀名称

    使用hasSuffix属性即可 例如 [photo.thumbnail_pic.lowercaseString hasSuffix:@"gif"]

  6. Golang之ring.Ring的Link操作

    ring.Ring 是一个环链. 其Link操作规则是: r.Link(s) => t = r.Next r.Next.Prev = s.Prev s.Prev.Next = r.Next r. ...

  7. 部署ghost博客

    wget https://ghost.org/zip/ghost-0.6.4.zip npm install --production NODE_ENV=production npm start &g ...

  8. Install sheild设置了Blue皮肤,但是有的窗口更改不了问题

    发现和顺序有关系:1.先指定skins:2.Release:3.再改对话框

  9. MVC模式中路由如何生成URL

    路由有必要的参数吗 在MVC设计模式中,一个比较重要的步骤是浏览器发送的请求如何生成相应的URL,交给服务器去实例化相应的控制器类然后调用相应的控制器类的对应方法,返回视图给用户.这个流程细说起来比较 ...

  10. [小技巧]初次接触 SSIS Package 的一点总结

    1 动态改变数据源 package从创建到调试到测试到生产环境,往往需要运行在不同的服务器上.我们可以定义Environment和Server两个变量,一个用于改变 Server,一个用于接收实际Se ...