// 定义函数时 需要加一个 func关键字 sayHello 为函数名 括号里的为参数(参数名: 参数类型) -> 指的是返回值 {}大括号里面的表示函数体
func sayHello(name:String, number:Int)->String {
return name
}
sayHello("dt", 99)
// 我们可以给函数参数加一个标签 (外部参数) 用于提示我们需要输入一个什么样的参数 或者说是干什么用的
func sayGoodBye(peronName name:String, number:Int)->String {
return name+"\(number)"
}
sayGoodBye(peronName: "xg", 99)
// mark
// 参数加 # 号表示该参数名 外部和内部都可以访问到
func say1(#name:String, #sex:String)->String {
return name + " " + sex
}
say1(name: "lb", sex: "?")
// 参数前面加 _ 修饰 表示默认参数, 需要赋一个默认值, 如果在调用函数的时候传递该参数, 则替换掉默认值, 如果不传递, 则返回默认值
func say2(name:String, _ sex:String = "!")->String {
return name + " " + sex
}
say2("sx", "?")
say2("zx")
// 当不确定需要给函数传递的参数个数时, 写成下面这种...的形式
func say3(numbers:Int...)->Int {
var sum : Int = 0
for i in numbers {
sum += i
}
return sum
}
say3(10, 20, 30)
// 如果我们想改变传递进来的参数的值, 需要在参数名前面 + inout关键字修饰, 在调用的时候需要在参数前添加 &符号
var foo = 5
func say4(inout num:Int) {
num = 10
}
say4(&foo)
foo
func say5(name:String, sex:String)->(name:String, sex:String){
return("xm", "?")
}
say5("xq", "!")
// 闭包
// 声明: (参数列表)->返回值
func sortNum(arr:[Int], num:Int, cb:(num1:Int, num2:Int)->Bool)->[Int] {
var result = [Int]()
for i in arr {
if cb(num1: i, num2: num) {
result.append(i)
}
}
return result
}
// 闭包的实现: { (参数列表) -> 返回值 in 函数体}
var numbers = [40, 50, 17, 54, 84, 23]
sortNum(numbers, 50, {(num1:Int, num2:Int)->Bool in
return num1 > num2
})
sortNum(numbers, 30, { (num1, num2) -> Bool in
return num1 > num2
})
sortNum(numbers, 44, { (num1, num2) -> Bool in
num1 > num2
})
// $0代表闭包参数列表中第0个参数 $1代表闭包参数列表中第1个参数
sortNum(numbers, 33, {
$0 > $1
})
sortNum(numbers, 22, >)
// 尾随闭包 写在函数的参数列表外面, 代表函数的最后一个参数
sortNum(numbers, 11) { (num1, num2) -> Bool in
return num1 > num2
}
// struct 是值类型 类是引用类型 (操作的是对象)
struct Student {
// 构造方法
init(name:String, age:Int){
self.name = name
self.age = age
}
// 含有属性和方法
var name : String = "aa"
var age : Int = 10
func speak(num1 : Int, num2 : Int)->Int{
return num1 + num2
}
}
var stu = Student(name: "ff", age: 99)
stu.name
stu.age
stu.speak(3, num2: 2)
struct Point {
var x = 0
var y = 0
}
struct Size {
var width = 0
var height = 0
}
struct myRect {
// 存储属性
var origin = Point()
var size = Size()
var center : Point{
// 计算属性
get{
var originX = self.origin.x + self.size.width / 2
var originY = self.origin.y + self.size.height / 2
return Point(x:originX, y:originY)
}
set(newCenter){
self.origin.x = newCenter.x - self.size.width / 2
self.origin.y = newCenter.y - self.size.height / 2
}
}
}
var rect = myRect(origin: Point(x: 0, y: 0), size: Size(100, height:200))
class Person {
var name : String
var age : Int?
init(name:String, age:Int){
self.name = name
self.age = age
}
// 析构方法
deinit{
}
func say(){
println("say")
}
}
var p = Person(name: "xq", age: 90)
p.name = "xx"