SWIFT

作者: 箫声_筱昇 | 来源:发表于2016-05-09 23:33 被阅读75次
    • 在 swift 中'?'相当于可选类型, optional;
    • '?'的使用场景:当我们声明变量的时候,且又不想为变量赋初值;
    • 在 swift 打印的结构中, nil 实际上就是一个枚举值
    • 可选类型 optional 实际上是一个枚举类型,给枚举类型中有两个枚举值: none 和 some; 如果为 none 时,就说明未赋初值(该变量中目前无值),some 说明该变量已经进行了初始化赋值.
    • '?',其实是可选类型的语法糖形式, var optional<Int>等同于 var a:optional<Int>
    var a:Int? = 9
    print(a)  //结果为 optional(9)
    
    • 如果我们将一个变量声明为可选类型,实际上是给变量目前就是一个枚举值:当我们在使用的时候,希望使用的就是我们声明的类型,例如在该处的 Int 类型;这个时候我们就需要解包' ! ',将枚举类型转换我们所期望的类型
    • 这个转换实际上就是类型与类型之间的转换,在强制解包的时候,我们要保证变量有值,也就是保证变量为 optional.some;
    print(a!)// 所得到的结果就为9
    
    • 注意
      • 当我们为可选类型赋值之后,就等同于: optional.some = 初值;那么打印出来的形式为 optional(初值).
      • 相反我们在打印的时候,进行解包' ! ' => 本质上就是取出 optional.some 中的值,打印出来的形式 ----初值----
    //当 a 为 nil 的时候,我们要强制解包的话会导致崩溃,所以我们在 输出值的时候,要先进行判断,在此要注意:解包之前的判断,只是为了确定变量有值
    var a_1:Int? = 0
    if a_1 != nil {
    print(a_1! + 1)
    }else{
    print("未赋初值")
    }
    
    //可选绑定,用来判断 b 是否为 nil
    如果 a_1等于 nil 的时候,赋值操作失败,如果a_1 != nil, 实际上是讲 a_1! 赋值给 b, 赋值操作成功.
    if var b = a_1 {
    print("b=",b)
    }else{
    print("未赋初值--")
    }
    

    ' ? ' 和' ! '的用法在系统的类型的对象中使用比较频繁

    2.结构体
    struct Point {
    var _x:Float = 0.0
    var _y:Float = 0.0
    //CGPointMake(x:y:)
    //为结构体增加一个成员方法,类似于 OC 中的实例方法----减号方法
    //用 mutating 来修饰成员的方法的作用为:可以在成员方法中修改结构体的成变量的值
    mutating func pointMake(x:Float,y:Float) {
    _x = x
    _y = y
    }
    //在结构体中,声明的方法如果未加 static 修饰词,该方法就是成员方法(-号方法),如果是有 static 修饰,就是类方法(静态方法)===加好方法
    //在任何计算机语言中,类方法中不能使用属性或者是实例变量.因为在执行该方法的时候,不能确定当前类是否被初始化.
    //在加好方法中,不能使用属性,成员变量,减号方法
    static func jiaHaoMethod() {
    print("这是类方法")
    // pointMake(&<#T##Point#>)
    }

    //作用域的范围
    

    // public //公众的.将方法声明在. h 中.
    // private //私用.讲方法声明在.m 中
    // protected //受保护的.子类可以继承该方法.外部无法调用,
    }

    //Point()   ==   alloc init
    //初始化一个结构体类型
    var mypoint =  Point()
    //当结构体中有成员变量的时候,系统也提供了有参数的初始化方式.
    var mypoint_1 = Point(_x: 10.0, _y: 20.0)
    //使用结构体中的成员变量
    //print("mypoint_1.x",mypoint_1.x,"mypoint_1.y",mypoint_1.y)
    //var p = mypoint_1;
    //p.x = 20.0
    //print("p.x",p.x,"mypoint_1",mypoint_1.x)
    
    //为结构体的成员变量赋值
    //mypoint_1.x = 20.0
    
    //使用结构体中的成员方法(对象方法)
    Point.jiaHaoMethod()
    var mypo = Point()
    mypo.pointMake(10.0, y: 20.1)
    print(mypo)
    
    //静态方法就是类方法.结构体的类方法要用类名来调用.
    Point.jiaHaoMethod()
    
    //模仿OC写一个frame,包含了 original 和 size 两个结构体对象, rectmake
    
    
    

    相关文章

      网友评论

          本文标题:SWIFT

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