Swift(下) 函数 闭包 结构体

// 定义函数时 需要加一个 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"

原文地址:https://www.cnblogs.com/sunSQuan/p/4273889.html