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”关键字)

    }

    读完觉得学到点什么,就( 顶一个!)
  • 相关阅读:
    Ftp、Ftps与Sftp之间的区别
    Previous Workflow Versions in Nintex Workflow
    Span<T>
    .NET Core 2.0及.NET Standard 2.0 Description
    Announcing Windows Template Studio in UWP
    安装.Net Standard 2.0, Impressive
    SQL 给视图赋权限
    Visual Studio for Mac中的ASP.NET Core
    How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
    用于Azure功能的Visual Studio 2017工具
  • 原文地址:https://www.cnblogs.com/susufufu/p/5705576.html
Copyright © 2011-2022 走看看