美文网首页
Swift 中结构体和类

Swift 中结构体和类

作者: 紫藤花的魂 | 来源:发表于2021-04-15 10:54 被阅读0次

    swift 中类和结构体的区别
    结构和类
    结构和类是通用的,灵活的结构,它们成为程序代码的构建块。您可以定义属性和方法,以使用与定义常量,变量和函数相同的语法向结构和类添加功能。

    与其他编程语言不同,Swift不需要您为自定义结构和类创建单独的接口和实现文件。在Swift中,您可以在一个文件中定义一个结构或类,并且该类或结构的外部接口会自动提供给其他代码使用。

    笔记

    传统上将类的实例称为对象。然而,夫特结构和类在功能上更接近比在其他语言,等等本章的描述适用于实例功能任一类或结构类型。因此,使用了更通用的术语实例。
    

    比较结构和类
    Swift中的结构和类有很多共同点。两者都可以:

    定义属性以存储值
    定义提供功能的方法
    定义下标以使用下标语法提供对它们的值的访问
    定义初始值设定项以设置其初始状态
    扩展以扩展其功能,使其超出默认实现
    符合协议以提供某种标准功能
    

    类具有结构没有的其他功能:

    继承使一个类可以继承另一个类的特征。
    通过类型转换,您可以在运行时检查和解释类实例的类型。
    反初始化程序使类的实例释放其已分配的任何资源。
    引用计数允许对一个类实例进行多个引用。
    

    Swift中的所有基本类型(整数,浮点数,布尔值,字符串,数组和字典)都是值类型(来自官方文档)
    考虑以下示例,该示例使用Resolution上一个示例的结构:

    1.  let hd = Resolution(width: 1920, height: 1080)
    2.  var cinema = hd
    

    本示例声明一个常量hd,并将其设置为使用Resolution全高清视频的宽度和高度(1920像素宽x 1080像素高)初始化的实例。

    然后,它声明一个名为的变量cinema,并将其设置为的当前值hd。因为Resolution是结构,所以将创建现有实例的副本,并将此新副本分配给cinema。尽管现在hdcinema现在具有相同的宽度和高度,但它们是幕后的两个完全不同的实例。

    接下来,将的width属性cinema修改为用于数字电影放映的稍宽的2K标准的宽度(宽2048像素,高1080像素):

    1.  cinema.width = 2048
    

    检查的width属性cinema表明它确实已更改为2048

    1.  print("cinema is now \(cinema.width) pixels wide")
    2.  // Prints "cinema is now 2048 pixels wide"
    

    但是,width原始hd实例的属性仍然具有旧值1920

    1.  print("hd is still \(hd.width) pixels wide")
    2.  // Prints "hd is still 1920 pixels wide"
    

    cinema提供了的当前值时hd,存储在中的hd复制到新cinema实例中。最终结果是两个完全独立的实例,其中包含相同的数值。然而,因为它们是独立的情况下,设定的宽度cinema,以2048不影响存储在所述宽度hd,如示于下图中:

    ../_images/sharedStateStruct_2x.png

    相同的行为适用于枚举:

    1.  enum CompassPoint {
    2.  case north, south, east, west
    3.  mutating func turnNorth() {
    4.  self = .north
    5.  }
    6.  }
    7.  var currentDirection = CompassPoint.west
    8.  let rememberedDirection = currentDirection
    9.  currentDirection.turnNorth()
    
    11.  print("The current direction is \(currentDirection)")
    12.  print("The remembered direction is \(rememberedDirection)")
    13.  // Prints "The current direction is north"
    14.  // Prints "The remembered direction is west"
    

    rememberedDirection被赋予的价值currentDirection,它实际上是设置为该值的副本。更改currentDirection其后的值不会影响存储在中的原始值的副本rememberedDirection

    类:


    image.png

    结构体和类初始化器

    image.png
    一旦自定义了结构体的初始化器,那么系统就不再为这个结构体生成其他的初始化器。
    image.png
    image.png

    相关文章

      网友评论

          本文标题:Swift 中结构体和类

          本文链接:https://www.haomeiwen.com/subject/kotdlltx.html