// Playground - noun: a place where people can play
import UIKit
//=================================================================
//函数
//
// func 函数名 (参数列表) -> 返回类型 {
// 代码块
// }
func sayHi(name: String) -> String {
return "Hi, " + name
}
var letter = "aeibcd1234"
//a i b
//e c d
//数字
func countLetter(letter: String) -> (Int, Int, Int) {
var aib = 0
var ecd = 0
var num = 0
for c in letter.lowercaseString {
switch c {
case "a", "i", "b":
aib++
case "e", "c", "d":
ecd++
default:
num++
}
}
return (aib, ecd, num)
}
countLetter(letter)
//=================================================================
//函数类型的变量
//有点类似之前学过的函数指针
var funcType: String -> String = sayHi
funcType("蓝鸥")
func sayBye(name: String) -> String {
return "Bye! " + name
}
funcType = sayBye
funcType("蓝鸥")
//参数没有名字,我们需要添加一个外部形参
//1.在参数前加一个外部形参名 注:不能在函数中使用外部形参名
//2.在参数名前加 #
func personInfo(name personName: String, #sex: String, _age: String = "18") -> String {
return personName + " " + sex + " " + _age
}
personInfo(name: "隔壁老王", sex: "男")
//可变参数, 都是相同类型的参数
func sum(numbers: Float...) -> Float {
var sum: Float = 0.0
for number in numbers {
sum += number
}
return sum
}
sum(1.0, 2.0, 3.0, 4.0, 5.0)
//如果需要用到参数运算(修改参数的值), 需要在此之前加var修饰
func hanshu(var a: Int, b: Int) {
a += 3
}
var number = 5
var number1 = 5
var number2 = 3
// inout关键字: 如果说我们改变传递的值,则需要用inout修饰变量
//传递参数的时候,需要用&
func swap(inout number1: Int, inout number2: Int) {
var temp = number1
number1 = number2
number2 = temp
}
swap(&number1, &number2)
number1
number2
func sixPlus(price: Float) -> Float {
return price * 0.8
}
//函数类型作为返回值
//隐藏掉 不希望被人能看到内部的方法
func changeValue(plus: Bool) -> Int -> Int {
func plusOne(number: Int) -> Int {
return number + 1
}
func minusOne(number: Int) -> Int {
return number - 1
}
return plus ? plusOne : minusOne
}
changeValue(true)
var cc: Int -> Int = changeValue(false)
cc(20)
//=============================================================
//闭包
//闭包跟OC的block一样
//用法
//{
// (参数列表)->返回值 in
// 闭包的实现
//{
var names = ["Qiaoming", "kan", "taobao"]
var sortedNames1:() = sort(&names, {
(stringA: String, stringB: String) -> Bool in
return stringA > stringB
})
names
//去掉类型,通过类型推断自动获取类型
//单行可以去掉return
var sortednames2:() = sort(&names, {
(s1, s2) -> Bool in
s1 < s2
})
names
//---------------------------------------
var sortesNames3:() = sort(&names, {
return $0 > $1
})
// $0表示第一个数 $1表示第二个数
names
//---------------------------------------
var sortesNames4:() = sort(&names, <)
names
//---------------------------------------
sort(&names) { (s1, s2) -> Bool in
return s1 > s2
}
names
//=====================================================================
//类 结构体
/**
相同点:
1.都可以定义属性
2.都可以定义方法,这是swift跟oc的明显的区别之一
3.都可以定义构造器(初始化方法)
4.都可以遵循协议
5.都可以被扩展
不同点:
1.类可以继承,而结构体不能
2.类可以被类型推断
3.类可以通过析构释放内存
4.类他是引用类型,结构体是值类型
*/
原文:http://www.cnblogs.com/newBlash/p/4273613.html