zoukankan      html  css  js  c++  java
  • 【Swift】学习笔记(八)——类和结构体

    1、类和结构体的定义

    <pre name="code" class="html">struct Resolution {
        var width = 0
        var height = 0
    }
    class VideoMode {
        var resolution = Resolution()
        var interlaced = false
        var frameRate = 0.0
        var name: String?    //值为可选String类型的name
    }

    
    
    类:keywordclass,  struct:结构体


    2、创建类和结构体的实例(其它语言中称实例为对象。)

    let someResolution = Resolution()
    let someVideoMode = VideoMode()

    咦,非常easy啊,怎么没有keywordnew呢。。

     和将函数赋值给变量是一样的啊。是的。

    就这么简单。无需keyword。


    3、结构体有一个逐属性构造器,类木有。

    let vga = Resolution(640, height: 480)


    4、使用. 点 来訪问属性,包含訪问和赋值。

    someVideoMode.resolution.width = 1280


    5、结构体是值类型,类是引用类型。


    6、类的恒等运算符 等价于(===),不等价于(!==)推断两个变量或常量是否引用了同一个实例


    7、指针无需特定的(*)来表示是一个内存地址引用,也不须要特定的符号(->)来訪问。它和訪问属性是一样的 用 (.)点。


    8、类和结构体的差别

    Swift 中类和结构体有非常多共同点。共同处在于:

    • 定义属性用于存储值
    • 定义方法用于提供功能
    • 定义附属脚本用于訪问值
    • 定义构造器用于生成初始化值
    • 通过扩展以添加默认实现的功能
    • 符合协议以对某类提供标准功能

    与结构体相比,类还有例如以下的附加功能:

    • 继承同意一个类继承还有一个类的特征
    • 类型转换同意在执行时检查和解释一个类实例的类型
    • 解构器同意一个类实例释放不论什么其所被分配的资源
    • 引用计数同意对一个类的多次引用

    9、类和结构体的选择

    依照通用的准则。当符合一条或多条下面条件时,请考虑构建结构体:

    • 结构体的主要目的是用来封装少量相关简单数据值。
    • 有理由估计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。

    • 不论什么在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
    • 结构体不须要去继承还有一个已存在类型的属性或者行为。

    合适的结构体候选者包含:

    • 几何形状的大小。封装一个width属性和height属性,两者均为Double类型。
    • 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
    • 三维坐标系内一点,封装xyz属性。三者均为Double类型。

    在全部其他案例中,定义一个类。生成一个它的实例,并通过引用来管理和传递。实际中,这意味着绝大部分的自己定义数据构造都应该是类,而非结构体。






  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6938564.html
Copyright © 2011-2022 走看看