专栏首页韦弦的偶尔分享Swift入门:结构体

Swift入门:结构体

结构体是复杂的数据类型,这意味着它们由多个值组成。然后创建结构的实例并填充其值,然后可以在代码中将其作为单个值传递。例如,我们可以定义一个Person结构体类型,它包含两个属性:clothesshoes

struct Person {
    var clothes: String
    var shoes: String
}

当您定义一个结构体时,Swift使它们很容易创建,因为它会自动生成所谓的成员初始化器。简单地说,这意味着您可以通过为结构的两个属性传入初始值来创建结构体,如下所示:

let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")

一旦创建了结构体的实例,就可以通过写入结构体的名称、点.和要读取的属性名称来读取其属性:

print(taylor.clothes)
print(other.shoes)

如果将一个结构指定给另一个结构,Swift会在幕后复制它,以便它是原始结构的完整独立副本。好吧,严格来说这不是真的:Swift使用了一种叫做“写时复制”的技术,这意味着它只在你试图更改数据时才实际拷贝你的数据。

为了帮助您了解结构体副本的工作原理,请将这段代码放入您的playground:

struct Person {
    var clothes: String
    var shoes: String
}

let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")

var taylorCopy = taylor
taylorCopy.shoes = "flip flops"

print(taylor)
print(taylorCopy)

这将创建两个Person结构体,然后创建第三个称为taylorCopy的结构体作为taylor的副本。接下来发生的是有趣的部分:代码改变了taylorCopy,并同时打印了它和taylor。如果您在结果窗口中查看,您将看到副本与原始结构体具有不同的值:更改一个副本不会更改另一个。

结构体内的函数

您可以将函数放在结构体中,事实上,对于读取或更改结构体中数据的所有函数,这样做是一个好主意。例如,我们可以在Person结构体中添加一个函数来描述他们的穿着,例如:

struct Person {
    var clothes: String
    var shoes: String

    func describe() {
        print("I like wearing \(clothes) with \(shoes)")
    }
}

还有一件事你应该知道,但在代码中看不到:当你在一个结构体中编写一个函数时,它被称为一个方法。在Swift中,无论是函数还是方法,您都可以编写func,但是当您谈到它们时,它们之间的区别会被保留下来。

本文来自Hacking with Swift 给 swift 初学者的入门课程 Swift for Complete Beginners Structs

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Swift 旋转图像 - LeetCode

    在计算机图像处理里,由于图片的本质是二维数组,所以也就变成了对数组的操作处理,翻转的本质就是某个位置上数移动到另一个位置上。

    韦弦zhy
  • iOS 登录接口封装实践

    我也一样,我手上有一个封装了所有账户体系相关接口的SDK,运行良好但也遇到一些烦心事,就拿登录来说说吧。

    韦弦zhy
  • SwiftUI:自定义容器

    尽管您不太可能经常这样做,但我想至少告诉您,完全可以在SwiftUI应用中创建自定义容器。这需要更高级的Swift知识,因为它利用了Swift的一些强大功能,因...

    韦弦zhy
  • 京东版“Dash Button”问世,支持一键购买快消品

    镁客网
  • 讲给前端的正则表达式(1):基本概念

    正则表达式(regex)是定义搜索模式的字符序列。由于对程序员的日常工作非常有用,所以在 JavaScript 中也支持它。在这个系列文章中,我会向你展示其工作...

    疯狂的技术宅
  • 购买腾讯云海外服务器优惠6000元方法

    有朋友在购买海外服务器的时候就跟我抱怨说价格太贵了吧,一个1核1G的都要1170元一年,4核8G更是需要9272元一年。对此我只想说是大家的方法没有找对,接下来...

    云优惠
  • Selenium + C# 实现模拟百度贴吧签到 1

    Selenium:是一个自动化测试工具,封装了很多WebDriver用于跟浏览器内核通讯,我用开发语言来调用它实现PhantomJS的自动化操作。它的下载页面里...

    小狐狸
  • python tkinter 文件MD5

    使用Python 2.7.10 tkinter 进行编写的“文件md5校验工具”。由于自己的水平问题,可能会存在一些错误,恳请大家指正,谢谢。

    py3study
  • 聊聊elasticsearch的MasterFaultDetection

    本文主要研究一下elasticsearch的MasterFaultDetection

    codecraft

扫码关注云+社区

领取腾讯云代金券