• 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"

  • 相关阅读:
    v-charts 使用markline标线
    覆盖率平台(5)- 生成覆盖率报告
    覆盖率平台(4)- 测程启动
    覆盖率平台(3)- 测程
    覆盖率平台(2)- 服务配置
    vue路由this.route.push跳转页面不刷新
    递归对比json
    ssh远程执行遇到的一些坑
    免密git clone/git pull
    git用远程代码强制覆盖本地代码
  • 原文地址:https://www.cnblogs.com/sunSQuan/p/4273889.html
Copyright © 2020-2023  润新知