zoukankan      html  css  js  c++  java
  • swift学习笔记之-类和结构体

    //类和结构体

    import UIKit

    //类和结构体

    /*

    1.枚举enum、结构体struct和String、Array、Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递的是值的拷贝,若声明为常量实例,则不能修改它的属性的值,即使属性为变量

    2.类class是引用类型,被赋值时传递的是实例的引用

    一、类和结构体对比

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

        定义属性用于存储值

        定义方法用于提供功能

        定义附属脚本用于访问值

        定义构造器用于生成初始化值

        通过扩展以增加默认实现的功能

        实现协议以提供某种标准功能

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

        继承允许一个类继承另一个类的特征

        类型转换允许在运行时检查和解释一个类实例的类型

        解构器允许一个类实例释放任何其所被分配的资源

        引用计数允许对一个类的多次引用

    二、按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:

        1.该数据结构的主要目的是用来封装少量相关简单数据值。

        2.有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。

        3.该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。

        4.该数据结构不需要去继承另一个既有类型的属性或者行为。

    */

    //结构体、类的定义

    struct Resolution {

        var width = 0

        var height = 0

        var filename = "data.txt"

    }

    class VideoMode {

        lazy var 延迟属性 = Resolution()        //在实例初始化时未创建,只有在被调用时才创建

        var resolution = Resolution()

        var interlaced = false

        var frameRate = 0.0

        var name:String?

    }

    let someresolution = Resolution()

    let somevideomode = VideoMode()    //实例的属性值均为默认值

    let vga = Resolution( 1024, height: 768, filename:"file.txt")  //构造体类型有成员逐一构造器,用于初始化新实例中的属性值,而类实例无默认的成员逐一构造器!

    //vga.width = 768  构造体类型的常量实例不能修改其任何属性的值

    var hd = vga    //hd的值为vga的值的拷贝,改变hd的值与vga无关,他们是不同的结构体实例

    hd.width = 1920

    print("hd=(hd.width)  vga=(vga.width)")

    let one = somevideomode    //类的常量实例的属性可以更改,因为更改的是所引用的实例的属性的值,而非引用本身

    one.resolution = hd

    one.interlaced = true

    one.frameRate = 25.0

    one.name = "1920i"

    let two = one

    two.resolution.width = 2880  //可以访问实例属性的子属性

    if two === one {               //(===,!== 等阶于,不等阶于,one和two引用同一实例)

        print("one的子属性width值=(one.resolution.width)  two的子属性width值=(two.resolution.width)")

        print("开始调用文件:(two.延迟属性.filename)")   //延迟属性:在实例初始化时未创建,只有在被调用时才创建,(前面加“lazy”关键字)

    }

    读完觉得学到点什么,就( 顶一个!)
  • 相关阅读:
    UISegmentControl
    UISwitch 开关控件
    UI弹出键盘和收回键盘
    UITextField的属性设置
    UIButton的属性设置
    UILabel 的属性设置
    创建UIView对象
    id和instancetype的异同
    SPOJ FIBPOL
    HDU 6168 Numbers
  • 原文地址:https://www.cnblogs.com/susufufu/p/5705576.html
Copyright © 2011-2022 走看看