zoukankan      html  css  js  c++  java
  • Swift结构体和类

    Swift结构体

    在Swift标准中,绝大多数的公开的类型都是结构体,而枚举和类只占很小的一部分

     比如Bool、Int、Double、String、Array、Dictionary等常见的类型都是结构体

    Swift定义一个结构体

     所有的结构体都有一个编译器自动生成的初始化器 编译器会根据情况,可能会为结构体生成多个初始化器

    宗旨是为了保证初始化的结构体所有成员都有初始值

    定义的Person结构体,编译器自动生成的初始化器

    创建一个Person结构体实例

    一旦在自定义结构体时自定义初始化器,编译器就不会载自动生成其它初始化器了

     结构体的内存结构

    Swift类

    类的定义和结构体类似,但是编译器并没有为类自动生成可以传入成员值的初始化构造器

    如果类的所有成员都在定义的时候指定了初始值,编译器会为类生成无参的初始化器 成员的初始化是在这个初始化器中完成的

    类的实例对象的内存结构 

     

    结构体与类的本质区别

    1. 结构体、枚举都是值类型,类是引用类型
    2. 值类型赋值给var、let或者给函数传参,是直接将所有内容拷贝一份 产生了全新的副本,属于深拷贝
    3. 引用赋值给var、let或者给函数传参,是将内存地址拷贝一份,指向的是同一份内存空间,属于浅拷贝

    在Swift标准库中,为了提升性能,String、Array、Dictionary、Set采取了Copy On Write的技术,仅当有"写"操作时,才会真正执行拷贝操作

    对于标准库值类型的赋值操作,Swift能确保最佳性能,所以没必要为了保证最佳性能来避免赋值

    建议:不需要修改的,尽量使用let

  • 相关阅读:
    Bug
    [转]C# 向web网站GET、POST 数据
    使用JavaScript触发ASP.NET Validator验证
    Asp.net 布尔运算符
    HTML 后退功能JS
    [转]C# 获取硬盘序列号 Volume Serial Number
    ASP.NET中,Gridview如何将源数据中的
    显示成回车

    ASP.NET 验证控件
    与或非的运算法则
    [转]WinForm开发,窗体显示和窗体传值相关知识总结
  • 原文地址:https://www.cnblogs.com/CoderHong/p/11256898.html
Copyright © 2011-2022 走看看