Swift之学习元组、闭包(block)、结构体

作者: 闯先生的猫 | 来源:发表于2016-04-07 13:51 被阅读164次

    元组:tuple
    Swift元组和oc的数组和字典很相像,但又有很大差别;
    1、元组可以放不同数据类型的元素
    2、元组的取值方式:
    《1》 可以使用下标取值0

    《2》 通过key取值 (必须定义)
    公式:1、(1,"mm",对象)
    2、("key":值,"key":值)
    取值的时候用 . 取值
    另外,Swift和oc的不同
    swift:
    数组 字典:[]
    元组:()
    oc:
    数组:[]
    字典:{}
    例子:

     let tuple1 = (1,"mm")
            print(tuple1.0)
            
            let tuple2 = (age:25,name:"小明")
            print(tuple2.age)
            
            let person = (height:175,age:22,sex:"男",name:"小刚",weight:130)
            print(person.name)
    

    闭包:封闭的代码块 也可以把函数 当成一个闭包
    一:基本使用公式
    1、完整公式
    let 闭包名 = {(参数列表) -> 返回值类型 in
    具体执行的代码
    如果有返回值 return 返回值

        }
    

    例:使用闭包 计算三个数的和

    let sum = {(a:Int,b:Int,c:Int)-> Int in
            
                return a+b+c
            }
           print(sum(1,2,2))
    

    2------无返回值 不带参
    完整版:{()->Void in 实现代码}
    简化版:{}

    let block = {
                print(".....")
            }
            block()
    

    3------有参数 无返回值 简化版
    {(参数列表) in 实现代码}

    let block = {(age:Int) in
            
                print("ggggggg")
            }
            block(22)
    

    4、调用:闭包名()
    如:block()
    二:当做参数使用公式
    1、声明包含闭包的方法
    func 方法名(闭包名:(参数列表)->返回值类型){闭包名(实参列表)}
    2、调用包含闭包的方法
    方法名{(参数列表) in 实现代码}
    --****-----使用block当做参数的使用顺序:执行顺序有点迷糊,需要好好理解
    要从两个方面理解它:书写顺序和调用顺序

    block调用.jpg
    //        3、block实现 方法调用的部分 :书写的顺序
    //        1)、调用方法:调用顺序
            loadData{(message) in
    //        3)回来调用block实现部分:调用顺序
                print(message)
            }
    
    //   1、在方法中 填写 把block声明部分 当做参数:书写顺序
        func loadData(response:(message:NSString)->Void){
    //        2)、进入方法体 调用block:调用顺序
    //        _省略变量
    //     2、 block调用:书写顺序
            response(message:"下载完毕")
        }
    

    三:typealias 替代
    typealias 要替代成的名字 = 要替代的数据类型
    如:type alias Height = Float
    先设置一个typealias

    typealias Block = ()->Void
    

    声明
    func mmmm(message:Block){
    print("666666")
    }
    实现
    mmmm{

        }
    

    ------结构体---------
    增加方法 (可以调用方法 也可以添加方法)
    增加实例化方法 (init)

    调用:
    使用实例化方法 创建结构体对象
    1、改变
    《1》自动生成实例化方法
    《2》可以在结构体中 创建方法
    《3》可以在结构体中 调用方法
    2、公式
    声明:
    struct 结构体名{
    let(var) 变量?
    func(){}
    }
    如果改变结构体中的 值 需要在方法前面加上mutabing

    使用:
    let(var) 变量名 = 结构体名.init()
    let(var) 变量名 = 结构体名.init(实参)

    3、与类的区别
    (1)结构体偏向 处理数据
    (2)类 偏向于 处理逻辑、关系
    (3)类中的对象 有对象的特征:封装、继承、多态
    (4)引用计数的处理不同 结构体有专门处理变量的引用计数方法

    struct Hero {
        var name:NSString?
        var blood:Int?
        var lv:Int?
        mutating func upBlood(){
            blood!+=100
            add()
        }
        
    }
    func add(){
        print("+++")
    }
    
    struct Monster {
        var name:NSString?
        var blood:Int?
        
       mutating func des(){
            print(name,blood)
        }
        func bbb(){
            print("")
        }
    创建 结构体对象
    let wa = Monster.init(name:"kkkk",blood:200)
           print(wa.name,wa.blood)
    

    ......................

    相关文章

      网友评论

        本文标题:Swift之学习元组、闭包(block)、结构体

        本文链接:https://www.haomeiwen.com/subject/ldvmlttx.html