iOS开发之Swift标识符

news2024/10/10 6:20:19

iOS开发之Swift标识符

在iOS开发中,使用Swift语言时,标识符是用来命名变量、常量、函数、类、结构体、枚举等程序实体的;
这些标识符使得Swift代码更加清晰、易于理解和维护。
iOS开发

一、变量与常量:var、let

var代表variable,即变量。
当使用var声明一个变量时,Swift会尝试根据初始值推断变量的类型,如果初始值提供了足够的信息来确定类型,那么编译器会自动为变量分配一个类型,否则需要显式指定变量的类型;
一旦变量的类型被确定,Swift会在内存中根据变量的类型为该变量分配足够的空间来存储其值;
变量的值可以在其生命周期内的任何时刻被改变。

let代表let constant,即常量。
当使用let用于声明一个常量,这意味着该常量的值在初始化后不能被改变。
var相同,当使用let声明一个常量时,Swift会尝试根据初始值推断常量的类型并根据类型分配足够的空间将初始值存储。
Swift使用ARC来管理内存,无论是常量还是变量,当它们不再引用时,Swift会自动释放内存。

对比Objective-C,这种声明方式的代码可读性更高,可以明确哪些值可变哪些不应该改变;
这种方式可以避免常量被意外修改;
编译器会在运行时系统进行优化,例如将常量的值嵌入到代码中,而不是每次使用都查找其值;
Swift符合函数式编程思想,强调不可变性,尽量避免在程序执行过程中改变状态。

二、访问控制与级别:open、public、internal、fileprivate、private

Swift提供访问控制机制,允许指定类、属性、方法等成员的可见性。

open允许在模块内外被访问使用,也可以在子类中被重写;
public允许在模块内外被访问使用,但不能被外部子类中重写可以在内部子类中重写;
internal只允许在定义它的模块内部被访问使用,为默认级别;
fileprivate只允许在其被定义的源文件内部被访问使用;
private只允许其在被定义的封闭作用域内被访问使用。

通过合理利用访问级别控制成员的可见性和可访问性,有利于封装内部细节,只暴露必要的接口给外部使用,从而保护封装性和安全性。

三、数据类型与关系的定义:class、struct、enum、protocol、extension

class是面向对象程序设计中的概念,是面向对象编程的基础;
是一种复杂的数据类型,包含数据成员和成员函数,数据成员对应属性,成员函数用于操作各种属性;
引用类型,可继承其他类和拥有子类。

struct是值类型数据结构,使单一变量可以存储各种数据类型的相关数据;
class相似,都拥有属性、方法,并能遵守协议和实现拓展;
无法继承,当给变量赋值时,会将对象复制一份给变量。

enum定义一组可能的值列表的自定义类型模型;
值可以是自定义的特定数据,也可以是一组有共同特性的数据的集合;
值可以是任何整数、符点类型的值,也可以是字符串或字符。

protocol用于定义方法、属性和下标的声明,可以被枚举、结构体、类遵守;
定义的方法在遵守协议的类、结构体、枚举中必须实现;
属性必须使用var定义。

extensionSwift的一个重要特性,可以为已存在的枚举、结构体、类别和协议添加新功能,而不需要修改该类型原本定义的代码;
可以新增计算属性、定义实例方法和类型方法、提供新的构造器、定义下标、定义和使用新的嵌套类型,甚至让一个已存在的类型遵守某个协议。

classstructenumSwift中的数据类型,用于定义和描述数据的结构和行为。
protocol用于定义一组行为规范,可以由其他类型遵守。
extension用于为已存在的类型添加新功能。
Swift的写时复制(Copy-on-write)技术是一种高效的内存管理技术,其核心思想在于,在多个对象或调用者尝试访问和修改相同资源时,只有当某个对象或调用者尝试修改资源内容时,才会真正复制一份私有副本给该对象或调用者。

四、操作符与运算:infix、prefix、postfix和operator

infix为中间操作符,默认操作符,定义出现在两个操作数之间的操作符,在自定义时需要指定优先级和结合性;
prefix为前置操作符,通常用于表示对单个操作数的某种转换或操作;
postfix为后置操作符,通常用于表示对单个操作数的某种后续操作或转换;
在声明自定义操作符时,需要使用operator配合并指定结合性(associativity)和优先级(precedence)。

五、函数参数类型修饰:inout

inout用于指定函数参数应该通过引用传递而不是值传递;
使用inout修饰的函数参数在函数内部修改时会直接影响外部的原始变量。

调用函数时需要使用&操作符来引用变量;
参数必须要使用var修饰;
inout参数不能有默认值。

六、类型转换:as

Swift是一种静态语言,在编译时编译器需要知道每个变量、常量、函数参数和返回值的类型,as用于显式进行类型转换,告诉编译器希望将一个值视为另一种类型。

在向上转型的过程中,as确保编译器接受转换,因为从逻辑上讲任何派生类的实例也都是其基类的实例;
在向下转型的过程中,这是从基类转换到派生类的过程,这种转换是不安全的;
使用as?时会返回一个可选值(Optional),如果成功则可选值包含转换后的结果,如果转换失败则可选值为nil
使用as!用于强制转换,编译器会假设转换一定会成功,如果不成功会在运行时崩溃。

Optional为枚举类型public enum Optional<Wrapped>: ExpressibleByNilLiteral,有两个casenonesome(Wrapped)

七、无主引用:unowned

Swiftunownedweak reference)为弱引用的替代方案,用于解决循环引用问题;
unowned假定引用的对象始终存在,并且不会变成nil,相对Objective-C中的weak而言引用更快,不需要在运行时检查引用是否有效,但是若引用的对象被提起释放则尝试访问该对象会导致运行时错误。

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

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

相关文章

算法练习—day1

title: 算法练习—day1 date: 2024-04-03 21:49:55 tags: 算法 categories:LeetCode typora-root-url: 算法练习—day1 网址&#xff1a;https://red568.github.io 704. 二分查找 题目&#xff1a; 题目分析&#xff1a; 左右指针分别为[left,right]&#xff0c;每次都取中…

X86平台下Linux系统安装部署KVM,以及KVM一些配置

环境&#xff1a;银河麒麟SP1-V2303系统&#xff0c;X86架构&#xff0c;目标虚拟机为win10 一、安装 1.APT源安装 sudo apt install qemu qemu-kvm bridge-utils virt-manager libguestfs-tools qemu-system qemu-efi qemu-utils libvirt-clients libvirt-daemon-system …

Centos7安装Docker与Docker-compose【图文教程】

个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…

去班味的尽头是风险管理

运维工程师的“班味”是从风险管理就加重的。 什么是班味呢&#xff1f;指的是打工人身上特有的疲惫气质&#xff0c;面色憔悴、双目无神和腰酸背痛都是“班味”的显著表现。习惯性回复“收到&#xff0c;马上来”、不自觉唉声叹气、下班也提不起精神等症状&#xff0c;则说明…

GIS水文分析计算流向学习

1 初步操作 流向&#xff0c;即水文表面水的流向&#xff1b; 水文分析的很多功能需要基于流向栅格&#xff1b; 在 SuperMap 中&#xff0c;对中心栅格的8个邻域栅格进行编码&#xff1b; 每一个中心栅格的水流方向都由这八个值中的某一个值来确定&#xff1b; 我还没弄懂水…

Linux------一篇博客了解Linux最常用的指令

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;Linux &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#…

2012年认证杯SPSSPRO杯数学建模C题(第一阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现&#xff1a; 从 1984 年的美国洛杉矶奥运会开始&#xff0c;奥运会就不在成为一个“非卖品”&#xff0c;它在向观众诠释更高更快更强的体育精神的同时&#xff0c;也在攫取着巨大的商业价值&#…

《C++程序设计》阅读笔记【1-函数】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学&#xff0c;回复C程序设计获取下载链接。 1 函数1.1 概述1.2 函数定义、声明、原型1.3 变量1.3.1 全局变量1.3.…

【THM】Nmap Post Port Scans(后端口扫描)-初级渗透测试

介绍 本房间是 Nmap 系列的最后一个(网络安全简介模块的一部分)。在这个房间中,我们重点关注端口扫描之后的步骤:特别是服务检测、操作系统检测、Nmap脚本引擎和保存扫描结果。 Nmap实时主机发现Nmap基本端口扫描Nmap高级端口扫描Nmap后端口扫描在本系列的第一个房间中,我…

保持ssh断开后,程序不会停止执行

保持ssh断开后&#xff0c;程序不会停止执行 一、前言 笔者做远程部署搞了一阵子&#xff0c;快结项时发现一旦我关闭了ssh连接窗口&#xff0c;远程服务器会自动杀掉我在ssh连接状态下运行的程序。 这怎么行&#xff0c;岂不是想要它一直运行还得要一台电脑一直打开ssh连接咯…

基于STM32+VS1053B的MP3设计

目录 一、整体介绍 二、模块介绍 1. stm32主控 2. VS1053B音频解码 3. 按键 4. OLED显示 三、程序代码&#xff1a; 资料下载地址&#xff1a;基于STM32VS1053B的MP3设计 一、整体介绍 话不多说&#xff0c;先看看整体原理图&#xff1a; 制作出来的实…

vulnhub----natraj靶机

文章目录 一.信息收集1.网段探测2.端口扫描3.版本服务探测4.漏扫5.目录扫描 二.漏洞利用1.分析信息2..fuzz工具 三.getshell四.提权六.nmap提权 一.信息收集 1.网段探测 因为使用的是VMware&#xff0c;靶机的IP地址是192.168.9.84 ┌──(root㉿kali)-[~/kali/vulnhub] └─…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记14:PWM捕获

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…

SQLite的架构(十一)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite下一代查询规划器(十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 介绍 本文档介绍SQLite库的架构。 这里的信息对那些想要了解或 修改SQLite的内部工作原理。 接口SQL 命令处理器虚拟机B-树…

深入理解npm常用命令

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的包管理工具&#xff0c;用于管理 Node.js 应用程序的依赖包。除了安装、更新和卸载依赖包外&#xff0c;npm 还提供了许多其他功能&#xff0c;如初始化项目、运行脚本、查看依赖树等。本文将详细介绍一些常用的 …

阿里云弹性计算通用算力型u1实例性能评测,性价比高

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

续二叉搜索树递归玩法

文章目录 一、插入递归二、寻找递归&#xff08;非常简单&#xff0c;走流程就行&#xff09;三、插入递归&#xff08;理解起来比较麻烦&#xff09; 先赞后看&#xff0c;养成习惯&#xff01;&#xff01;&#xff01;^ _ ^<3 ❤️ ❤️ ❤️ 码字不易&#xff0c;大家的…

将 Elasticsearch 向量数据库引入到数据上的 Azure OpenAI 服务(预览)

作者&#xff1a;来自 Elastic Aditya Tripathi Microsoft 和 Elastic 很高兴地宣布&#xff0c;全球下载次数最多的向量数据库 Elasticsearch 是公共预览版中 Azure OpenAI Service On Your Data 官方支持的向量存储和检索增强搜索技术。 这项突破性的功能使你能够利用 GPT-4 …

Android MediaRecorder

AndroidManifest.xml中添加权限标记 <uses-permission android:name"android.permission.RECORD_AUDIO"/> 动态添加权限MainActivity requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO},100); 创建MediaReco…

阿里云服务器ECS经济型e实例优惠价格99元一年

阿里云服务器99元一年配置为云服务器ECS经济型e实例&#xff0c;2核2G配置、3M固定带宽和40G ESSD Entry系统盘&#xff0c;新用户和老用户均可买&#xff0c;续费不涨价依旧是99元一年&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云99元服务器性能测评&#xff…