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下,利用homebrew安装PHP+Mysql+Nginx
具体可以参考直通车 http://blog.frd.mn/install-nginx-php-fpm-mysql-and-phpmyadmin-on-os-x-mavericks-using-home ...
- php获取客户端浏览器以及操作系统信息的方法
发布:sunday01 来源:net 阅读: 2 [大 中 小] 在较为智能的程序中,php可以获取客户端浏览器及操作系统信息,然后根据浏览器及系统类型,加载不同的页面,以提供更加个性化的 ...
- gem
bundle gem xxxrake build gem push pkg/xxx.gem rake releaserake install
- windows下找不到strings.h
头文件用的strings.h,换成string.h就好了.但是以前的Linux系统下用strings.h,strerror都能正常编译,怎么样能正常使用strings.h linux系统下的库问题跟w ...
- 管理员必备的20个Linux系统监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...
- Mac下显示\隐藏所有文件
显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true隐藏Mac隐藏文件的命令:defaults write ...
- C++函数的参数传递机制以及参数的类型选择
C++primer之函数的参数传递以及参数的类型 一:函数的基本知识 (1) 函数要素:返回类型,函数名字,形参(参数之间用逗号隔开) (2) 函数调用机制:我们通过调用运算符来执 ...
- comparing-html5-mobile-ui-frameworks
http://html5hub.com/comparing-html5-mobile-ui-frameworks/
- 20145129 《Java程序设计》第4周学习总结
20145129 <Java程序设计>第4周学习总结 教材学习内容总结 继承与多肽 继承共同行为 继承是避免多个类间重复定义共同行为.(将相同的代码提升为父类) 关键字extends:表示 ...
- 【每日scrum】NO.1
今天我们小组正式开始了冲刺,问题还是不少的,有必要记录下来来指导和改进后续的工作: 1.负责去找地图,却发现地图不能很好的适应我们的软件,略心塞>>> 2.本来计划把迪杰斯特拉算法看 ...