Swift基础知识:22.Swift构造过程

在 Swift 中,构造过程是实例化一个类、结构体或枚举实例的过程,它包括设置实例的初始状态和执行其他必要的设置。构造过程通过定义构造器(initializer)来实现,构造器是一种特殊的方法,用于创建和初始化实例。构造器可以确保实例在第一次使用之前完成正确的初始化。

默认构造器

如果类、结构体或枚举没有提供任何自定义构造器,Swift 会为它们提供一个默认构造器。默认构造器会使用所有属性的默认值来创建一个新的实例。

示例:

class SomeClass {var name: String = "Default"var age: Int = 0
}
let instance = SomeClass()
print(instance.name)  // 输出:Default
print(instance.age)   // 输出:0

自定义构造器

除了默认构造器外,我们还可以定义自定义构造器来初始化实例。自定义构造器可以接受参数,并在初始化过程中对实例进行一些特定的设置。

示例:

class Person {var name: Stringvar age: Intinit(name: String, age: Int) {self.name = nameself.age = age}
}
let person = Person(name: "Alice", age: 25)
print(person.name)  // 输出:Alice
print(person.age)   // 输出:25

可选类型的构造器

构造器可以返回一个可选类型的实例,这在构造过程中可能会失败时很有用。可选类型的构造器在构造失败时返回 nil,而不是抛出错误。

示例:

class Room {let name: Stringinit?(name: String) {if name.isEmpty {return nil}self.name = name}
}
let room1 = Room(name: "Living Room")  // 构造成功
let room2 = Room(name: "")             // 构造失败,返回 nil

构造过程中的常量属性赋值

在构造过程中,无法对常量属性进行赋值。这是因为常量属性在实例构造完成后不能再被修改。但是,可以在构造过程中对常量属性进行赋值,只要在构造过程结束时常量属性有一个确定的值即可。

示例:

class Temperature {let celsius: Doubleinit(fromFahrenheit fahrenheit: Double) {celsius = (fahrenheit - 32.0) / 1.8}
}
let temperature = Temperature(fromFahrenheit: 68.0)
print(temperature.celsius)  // 输出:20.0

构造过程是 Swift 中实例化类、结构体或枚举实例的重要部分。构造器负责确保实例在第一次使用之前完成正确的初始化。通过定义默认构造器、自定义构造器、可选类型的构造器和常量属性赋值等方式,我们可以在构造过程中对实例进行灵活的初始化设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SqlServer2016离线安装--Microsoft R Open 和 Microsoft R Server安装文件位置

问题 SQL SERVE 2016离线安装,会出现“Microsoft R Open 和 Microsoft R Server 脱机安装”的界面, 无法点击下一步的情况,如下图: 原因 离线安装时需要下载两个文件 解决方案 1、访问路径下载文件 https://go.microsoft.c…

Python 实现 OBV 指标计算:股票技术分析的利器系列(7)

Python 实现 OBV 指标计算:股票技术分析的利器系列(7) 介绍算法解释 代码rolling函数介绍核心代码计算 VA 列计算 OBV 列计算 MAOBV 完整代码 介绍 OBV 指标是“On-Balance Volume”的缩写,意为“量价平衡指标”。它是一种用于衡…

《游戏引擎架构》 -- 学习4

资源及文件系统 文件系统 游戏引擎的文件系统API通常提供以下功能: 搜需路径:是含一串路径的字符串,各路径之间以特殊字符(如冒号或分号)分隔,找文件时就会从这些路径进行搜寻。例如在命令行下执行程序&a…

Code Composer Studio (CCS) - 全局搜索功能

Code Composer Studio [CCS] - 全局搜索功能 1. Ctrl H,全局搜索功能References 1. Ctrl H,全局搜索功能 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

VS和QT联合开发

提示:本文为学习记录,若有疑问,请联系作者,谦虚受教。 文章目录 前言一、安装二、新建项目1.VS打不开UI文件2.VS找不到QT对应的版本号三、其他问题1.vs无法识别加载ui新添加的控件2.UI界面出现中文乱码3.修改VS字体颜色4.自动代码补全功能5.添加<QtSerialPort/qserialpo…

【AI大模型】ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Leetcode | 231. 2 的幂 C语言

Problem: 231. 2 的幂 文章目录 思路解题方法Code 思路 说白了就是靠硬算&#xff0c;但是要知道对sum不进行控制就会导致直接超标&#xff0c;所以要在for循环的条件中加上sum < n 解题方法 由思路可知 Code bool isPowerOfTwo(int n) {long int sum 1;for(int i 0; i &…

拉伸图片覆盖整个页面的css写法

如果您想要拉伸一张图片以覆盖整个页面&#xff0c;可以使用以下CSS代码&#xff1a; body {margin: 0;padding: 0;height: 100%;background-image: url(your-image-url.jpg); /* 替换为您的图片URL */background-size: cover;background-position: center center; /* 可选&…

vue3+vite项目中显示SVG图片

使用vite显示本地svg图标 vite-plugin-svg-icons是一个Vite插件&#xff0c;其作用是将SVG图标文件转换为Vue组件&#xff0c;以便在Vue项目中使用。 使用vite-plugin-svg-icons插件&#xff0c;可以将SVG图标文件导入到项目中&#xff0c;并将其转换为可复用的Vue组件。这样&a…

语文成绩(洛谷)

题目 原题 题目背景 语文考试结束了&#xff0c;成绩还是一如既往地有问题。 题目描述 语文老师总是写错成绩&#xff0c;所以当她修改成绩的时候&#xff0c;总是累得不行。她总是要一遍遍地给某些同学增加分数&#xff0c;又要注意最低分是多少。你能帮帮她吗&#xff1f; 输…

【springboot】 `@Column` 注解的使用

定义一个实体的属性时&#xff0c;如果和数据库的列名不一致的时候&#xff0c;需要用column 建立映射关系。 Column 是 Java 持久化 API&#xff08;Java Persistence API&#xff0c;JPA&#xff09;中的注解之一&#xff0c;用于指定实体类中属性与数据库表中列的映射关系。…

2024牛客(4)K题

登录—专业IT笔试面试备考平台_牛客网 using i64 long long; using ll long long; constexpr ll M 1e9 7; template<class Info> struct SegmentTree {int n;std::vector<Info> info;SegmentTree() : n(0) {}SegmentTree(int n_, Info v_ Info()) {init(n_, …

Vue样式绑定

1. 绑定 HTML class ①通过class名称的bool值判断样式是否被启用 <template><!--通过样式名称是否显示控制样式--><div :class"{ haveBorder: p.isBorder, haveBackground-color: p.isBackgroundcolor }">此处是样式展示区域</div><br /…

Linux篇:开发工具yum/vim/gcc/g++/Makefile/gdb

一. yum&#xff1a;软件包管理器 什么是软件包&#xff1f; 在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 (可以理解成windows 上的安装程序) 放在…

Linux C++ 字符编码转换 GBK与UTF8互转

Linux 下使用 iconv 命令可以转换文件的编码 iconv -f GBK -t UTF-8 input_file -o output_fileC 代码 使用 iconv 函数 iconv 函数签名&#xff1a; size_t iconv(iconv_t cd,、 char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); 需要注意的是&…

Python基础20 面向对象(3)多态、封装、反射

文章目录 一、多态1、什么是多态2、多态小实验 二、封装1、什么是封装2、内部属性的约定 三、反射1、什么是反射2、四个实现自省的函数&#xff08;1&#xff09;hasattr(object,name)&#xff08;2&#xff09;getattr(object,name,defaultNone)&#xff08;3&#xff09;seta…

神秘人暗访:行政窗口为什么要开展神秘顾客调研

在竞争日益激烈的服务市场中&#xff0c;行政窗口作为公共服务的直接提供者&#xff0c;其服务质量的好坏直接关系到政府的形象和公众对政府的信任度。为了更好地满足市民的需求&#xff0c;提升服务质量&#xff0c;开展神秘顾客调查显得尤为重要。神秘顾客调查的必要性包括以…

内网穿透的应用-如何本地部署Elasticsearch搜索分析引擎实现并发布公网远程访问

文章目录 系统环境1. Windows 安装Elasticsearch2. 本地访问Elasticsearch3. Windows 安装 Cpolar4. 创建Elasticsearch公网访问地址5. 远程访问Elasticsearch6. 设置固定二级子域名 Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎&#xff0c;它提供了一个分布式、多…

探索Flask框架:打造优雅而强大的Web应用

在当今互联网时代&#xff0c;Web应用的需求日益增长&#xff0c;而作为开发者&#xff0c;我们需要一个简洁明快、灵活可扩展的框架来满足这些需求。Flask框架作为一个Python微型框架&#xff0c;在其简洁的设计理念和丰富的扩展生态系统之间找到了完美的平衡&#xff0c;为我…

洛谷--二分(Java实现)

洛谷 B3627 立方根 题目描述 给定正整数 n&#xff0c;求 √n​。答案向下取整。 输入格式 仅一行&#xff0c;一个正整数 n。 输出格式 仅一行&#xff0c;一个正整数&#xff0c;表示√n。向下取整输出。 输入输出样例 输入 #1 27 输出 #1 3 输入 #2 100000 输…