Swift 中结构体和类

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,559评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,201评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 124,525评论 2 7