iOS开发之Swift标识符

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而言引用更快,不需要在运行时检查引用是否有效,但是若引用的对象被提起释放则尝试访问该对象会导致运行时错误。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++:函数重载和引用

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习C&#xff1a;函数重载和引用&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 函数重载1.函数重载的概念为什么C支持函数重载 引用引用的概念引…

基于SpringBoot+Vue的儿童书法机构管理系统

一、项目背景介绍&#xff1a; 儿童书法机构的管理是一个具有挑战性的任务&#xff0c;需要有效的信息管理和资源分配。传统的手动管理方式存在着效率低下、易出错等问题。为了解决这些问题&#xff0c;基于SpringBootVue的儿童书法机构管理系统应运而生。该系统利用现代化的技…

代码随想录第三十一天 | 贪心算法P1 | ● 理论基础 ● 455. ● 376. ● 53.

理论基础 题目分类 一般解题步骤 贪心算法一般分为如下四步&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 这个四步其实过于理论化了&#xff0c;我们平时在做贪心类的题目 很难去按照这四步去思考&…

数据结构:顺序表的基本操作!(C语言)

一、静态存储 #include <stdio.h> #include <stdlib.h>/*[1].定义静态顺序表的最大容量*/ #define MaxSize 10/*[2].自定义数据元素的数据类型*/ typedef int ElemType; 1. 静态分配的定义结构体 /*[3].静态分配的结构体定义*/ typedef struct {ElemType data[M…

最新AI创作系统ChatGPT网站系统源码+Ai绘画网站源码+Suno-v3-AI音乐生成大模型(sparkAi系统V6版本)

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…

rt-thread的nfs如何实现软硬件对接

rt-thread&#xff08;下面简称rtt&#xff09;有一个封装好的的虚拟文件系统&#xff0c;提供了一套通用的io文件接口例如 open,write,read这些&#xff0c;从没看过rtt的代码也没用过&#xff0c;文件系统在刚毕业的时候只是用过fatfs但没去纠结过。今年1月份听同事说只需要打…

C++(语法以及易错点2)

1.内联函数 1.1 概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调 用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 ​int ADD(int a,int b) {return ab; }​ 1.2 特性 1. inline是一种以空间换时间…

Java数据结构栈

栈&#xff08;Stack&#xff09; 概念 栈是一种先进后出的数据结构。 栈的使用 import java.util.Stack; public class Test {public static void main(String[] args) {Stack<Integer> s new Stack();s.push(1);s.push(2);s.push(3);s.push(4);System.out.println(s…

精密电阻阻值表和电容容值表

前面2张是电阻阻值表&#xff08;E-96/0603/1%&#xff09; 常见贴片电容的容值表

【智能优化算法】非洲秃鹫优化算法:一种新的全局优化问题的自然启发的元启发式算法

非洲秃鹫优化算法&#xff08;AVOA&#xff09;发表在中科院一区Computers & Industrial Engineering期刊上的论文“African vultures optimization algorithm: A new nature-inspired metaheuristic algorithm for global optimization problems" 01.引言 元启发式算…

DAY16|104.二叉树的最大深度,111.二叉树的最小深度,222完全二叉树的个数

文章目录 104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的个数 104.二叉树的最大深度 文字讲解&#xff1a;二叉树的层序遍历 视频讲解&#xff1a;二叉树的层序遍历 状态&#xff1a;求深度用前序遍历&#xff0c;求高度用后序遍历&#xff1b; 思路&#xff1a; …

【PSINS工具箱】EKF与UKF滤波

描述 对工具箱SINS/GPS,153例程的修改,将EKF和UKF放在一个文件里面,一次运行可以得到两个滤波的结果(带绘图与误差量化输出)。 片段 运行截图 程序完整源代码 在有工具箱的情况下,直接运行此代码,即可得到结果 % 基于PSINS工具箱的IMU数据生成与滤波 % date:2024-2-…

【系统架构师】-系统可靠性分析与设计

1、可靠性与可用性区别 1、系统可靠性&#xff1a;系统在规定时间内及规定的环境下&#xff0c;完成规定功能的能力&#xff0c;即系统无故障运行的概率 2、系统可用性&#xff1a;在某个给定时间点上系统能够按照需求执行的概率。 可靠性分为软件、硬件可靠性 2、可靠性指标…

LeetCode 第二题:冒泡排序详解 【2/1000】含imagemagick动态效果图

&#x1f464;作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 LeetCode解锁1000题: 打怪升级之旅htt…

使用微带线快速进行电感、电容的等效(Matlab代码实现)

使用微带线快速进行电感、电容的等效&#xff08;Matlab代码实现&#xff09; 目录 使用微带线快速进行电感、电容的等效&#xff08;Matlab代码实现&#xff09;1、高低阻抗微带线的近似等效2、等效电容的ADS测试3、等效电感的ADS测试 1、高低阻抗微带线的近似等效 更加精确的…

利用JS、CSS实现列表自动滑动滚动

零.业务需求 这几天在做大屏项目&#xff0c;对于大屏有很多信息需要实时滚动&#xff0c;废了点力气学的明明白白的&#xff0c;特来记录供大家学习。 0.1实现效果 一.逻辑分析 1.1滑动窗口和滚动条 当我们使用<table>或者<ul>标签时&#xff0c;我们可以制作…

蓝桥杯第十四届C++A组(未完)

【规律题】平方差 题目描述 给定 L, R&#xff0c;问 L ≤ x ≤ R 中有多少个数 x 满足存在整数 y,z 使得 。 输入格式 输入一行包含两个整数 L, R&#xff0c;用一个空格分隔。 输出格式 输出一行包含一个整数满足题目给定条件的 x 的数量。 样例输入 1 5 样例输出 …

Redis中的Sentinel(二)

Sentinel 初始化Sentinel状态。 在应用了Sentinel的专用代码之后&#xff0c;接下来&#xff0c;服务器会初始化一个sentinel.c/sentinelState结构(简称Sentinel状态),这个结构 保存了服务器中所有和Sentinel功能有关的状态(服务器的一般状态仍然由redis.h/redisServer保存);…

【java数据结构-二叉树(上)】

java数据结构-二叉树&#xff08;上&#xff09; 二叉树的概念二叉树的节点介绍 二叉树构造如何使用兄弟表示法构造二叉树两种特别的二叉树二叉树的基本性质&#xff1a; 二叉树的存储二叉树的遍历&#xff1a;前序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a;层…

最新ChatGPT4.0工具使用教程:GPTs,Midjourney绘画,AI换脸,GPT语音对话,文档分析一站式系统

一、前言 ChatGPT3.5、GPT4.0、相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而&#xff0c;GPT-4对普通用户来说都是需要额外付费才可以…