swift5(9)结构体和类

2020-02-27  本文已影响0人  C_G__

感谢作者
https://www.jianshu.com/p/ceedc973be3e

struct Resolution {
    var width = 0
    var height = 0
    
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}
        // 结构体和类
        // 我们可以使用与定义常量,变量和函数相同的语法来定义属性和方法,
        // 为我们的结构体和类添加功能
        
        // 比较结构体和类
        // 相同点:
        // 定义属性
        // 定义方法
        // 定义下标
        // 定义初始化方法
        // 可以被扩展 extend
        // 可以遵守协议
        // 不同点:
        // 类可以
        // 继承
        // 类型转换
        // 析构函数(Deinitializers)
        // 引用计数
        
        // 语法定义
        /**
         struct SomeStructure {
         }
         class SomeClass {
         }
         */
        var someResolution = Resolution();
        var someVideoMode = VideoMode();
        
        // 属性访问
        let width1 = someResolution.width;
        let width2 = someVideoMode.resolution.width;
        someResolution.width = 250;
        someVideoMode.resolution.width  = 255;
        
        // 结构体类型的成员初始化方法
        // 所有结构体都有一个自动生成的初始化方法
        var someResolution2 = Resolution(width: 33, height: 77);
        
        // 结构体和枚举是值类型
        // 类似Swift中的整数,浮点数,布尔值,字符串,数组和字典,都是值类型的,
        // 并且这些类型在Swift中的实现都是基于结构体的。故所有结构体和枚举值类型都是值类型。
        let someResolution3 = Resolution(width: 33, height: 77);
        var myResolution = someResolution3;
        
        var currentDirection = CompassPoint.west;
        let rememberedDirection = currentDirection;
        currentDirection.turnNorth();

        print("当前的方向,被改变后 \(currentDirection)");
        //!< 当前的方向,被改变后 north
        print("保存的方向 \(rememberedDirection)");
        //!< 保存的方向 west
        
        // 类是引用类型的
        let tenEighty = VideoMode();
        tenEighty.resolution = someResolution;
        tenEighty.interlaced = true;
        tenEighty.name = "视频模式";
        tenEighty.frameRate = 25.0;
        //赋值给新的实例对象
        let alsoTenEighty = tenEighty;
        alsoTenEighty.frameRate = 30.0;
        print(tenEighty.frameRate,alsoTenEighty.frameRate);
        //!< tenEighty.frameRate:30.0 alsoTenEighty.frameRate:30
        
        // 身份运算符
        
        // 指针
        // Swift中引用某个引用类型的实例作为常量或变量时,类似于C中的指针,
        // 但它不是指向内存中地址的直接指针(不是直接寻址),
        // 并且不需要编写星号*来指示你正在创建一个引用对象。
        // 相反,这些引用的定义与Swift中的任何其他常量或变量一样。
上一篇 下一篇

猜你喜欢

热点阅读