Swift-6-函数
// 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-函数的更多相关文章
- Swift(三.函数)
一.swift中的函数分为以下几类吧 1>无参无返 2>无参有返 3>有参无返 4>有参有返 5>有参多返 二.看下面几个例子吧 1>无参无返 func a ...
- Swift 语言函数
import Foundation // 函数声明于实现 func sayHello(name){ print("Hello \(name)") } // 函数调用 sayHell ...
- swift 之 函数
swift的函数跟脚本语言有很多神似之处. 如果有一天用swift开发服务器 ,很期待哇(一切皆有可能,毕竟人家说要跑在Linux上),
- Swift 中函数使用指南
关于Swift中的各种函数的使用的总结 前言 时间久了,好多东西我们就会慢慢忘记,在这里总结一下Swift中函数的使用原则,把大部分的函数使用技巧用代码示例来做了演示,但是如果想提高,还是要多多思考才 ...
- 窥探Swift之函数与闭包的应用实例
今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...
- 你需要知道的swift必备函数 map
map这东西在oc中并未用过,但是swift在处理数组的时候显得格外的游刃有余,这归功于map这个函数: map函数 arr.map(<#T##transform: (Int) throws ...
- Swift:函数和闭包
函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数一样有函数的参数和返回值,而且还支持嵌套,并且有函数参数默认值.可变参数等. //定义一个函数,注意参数和返回值,如果没 ...
- 窥探 Swift 之 函数与闭包的应用实例
今天的博客算是比较基础的,还是那句话,基础这东西在什么时候 都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小 ...
- Swift学习——A Swift Tour 函数
Functions and Closures 函数和封闭性(闭包) Functions 函数的使用 Swift中的函数定义和OC中有明显的差别了,使用func定义函数,在括号里定义參数和类型,用 ...
- Swift - 自定义函数规则说明
1,无返回值的函数 1 2 3 func test(name:String){ } 2,返回一个返回值 1 2 3 func test(name:String) -> Bool{ r ...
随机推荐
- mac 安装lua并配置Subline Text2 的lua开发环境
1 .下载相应的lua安装包 方法 一 Mointain Lion - Lua 5.2.1 Lion - Lua 5.2.1 Snow Leopard - Lua 5.2.1 Lua 将默认安装到 / ...
- Pull解析xml
没有写抛出的异常,例子是含有多个Person对象persons.xml(此片内容未写写入的代码),包含id,name,email,address标签,Person对象含有id,name,email,a ...
- python内建函数-数字相关
本篇对于数字有关的内置函数进行总结. 数字包括 int() , long() , float() , complex() ,这些函数都能够用来进行数值类型的转换.同时这些函数也接受字符串参数,返回字符 ...
- Bash美化
首先声明下,这些美化方式都不是我自己想的,而是多个牛人的方法. 第一:简单点 这个方法来自于:http://www.vimer.cn/?p=1554 没有美化前是这样,鼠标光标在很右边: 在.bash ...
- [原创]EnterpriseDB测试key申请方法
各位有对EnterpriseDB感兴趣的朋友,可以通过邮件方式申请测试key: 发送邮件至:zws@focus-soft.com,官方收到邮件后会有专人与您联系,一般情况都会很快得到一个测试key. ...
- poj 3625 Building Roads
题目连接 http://poj.org/problem?id=3625 Building Roads Description Farmer John had just acquired several ...
- ajax & jsonp & img
ajax 是一种请求服务器的方式,核心是XMLHttpRequest对象: 优点是无需刷新页面, 缺点是不能跨域请求. /* * Ajax direacted by Zakas * * Ajax.ge ...
- [转]What’s Behind Ericsson’s OpenWebRTC Project?
[转]What’s Behind Ericsson’s OpenWebRTC Project? http://www.tuicool.com/articles/z6rAVrJ Ericsson’s O ...
- iOS 进阶 第二十一天(0531)
0531 - Autolayout 不仅可以做屏幕适配还可以做系统适配 uidynamic 做物理动画.能做的效果如下图: Autolayout Autolayout 是一种“自动布局”技术,专门用来 ...
- linux查看有哪些shell可用
1.命令cat /etc/shells [tansheng@localhost ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/das ...