ios学习路线 -- Swift基础(1)
在了解swift之前我们需要知道OC和swift的区别Swift和OC的区别1. swift中函数为一等公民可以作为参数或者返回值传递同时面向协议编程而OC面向对象编程函数需要用selector封装或者闭包实现2. swift是类型安全的当编译的时候会进行类型检查如果出现问题会标注出来OC则不会进行报错3. swift中很多数据类型都是值类型的比如Arraydictionary而OC中很多都是指针类型如NSDictionary4. swift的枚举可以使用很多类型如整形字符串甚至支持泛型协议扩展等而OC的枚举就相差很多5. swift是支持泛型的6. swift对协议的支持更加丰富且可用于结构体和枚举OC的协议缺乏强约束且optional的关键字使得协议更加混乱Swift中的数值类型在swift中我们使用var来定义变量使用let来定义常量同时我们使用: 数据类型来标识当前的变量类型我们可以使用print来打印变量的值var wjm: Int 1 print(wjm \(wjm))整数swift提供了8163264位有符号和无符号整数浮点数Double 64位float 32位Bool true或者false元组 tuple元组是 Swift 中一种轻量级的复合数据类型核心作用是把多个不同类型或相同类型的值打包成一个单一的集合无需定义专门的结构体 / 类就能临时组合数据。长度固定创建后不能动态添加 / 删除元素支持命名元素和下标访问取值灵活使用元组可以为函数返回多个值且返回的值在元组中也可以被命名可选类型 optional在swift中nil不是指针而是一种数值缺失的特殊类型任何类型的可选项都可以设置为nil我们通过使用变量类型后 来表示这个变量是可选类型note可选类型是无法直接使用的其可以通过展开之后进行使用但是需要注意的是我们在工作中几乎不会使用而是通过(?: ??)可选链或者if let (可选绑定)来进行展开if let称为可选项绑定一个语句中可以使用多次用逗号隔开var name: String? wjm var number: int? 1006 if let name name, number number { code }?: 或者?? 称为可选链实际上optional是标准库中的一个枚举 范型其中的none代表的就是nilsome就是包装的类型同时在init中将该属性进行包装然后在使用的时候进行展开即可获取字符串 String初始化字符串var str var str wjm使用isEmpty来检查是否为空串Swift字符串常用操作String的传递实际上是复制操作for in操作可以用来遍历字符串且每一个字符为一个独立的character字符串拼接使用 或者append()索引每个String都有对应的索引类型String.index相当于character在String的位置我们不可以像其他语言那样使用[Int]来访问访问方式为使用索引同时通过index before || end来进行遍历通过insert at来插入字符区间运算符1...5 1,2,3,4,51..5 1,2,3,41..5 2.3.4.5[..5] -∞ .. 4note:区间运算符也可以使用在字符串中运算符重载在swift中struct和class都是可以为现有的运算符提供自定义的实现如果实现前缀或者后缀运算符的实现需要在func关键字之前指定prefix或者postfix如果是组合运算符需要将运算符的左参数设置为inout类型如果是等价运算符需要实现Equatable协议自定义运算符我们使用operator关键字进行运算符的定义和声明自定义运算符新的运算符需要作用在全局范围内循环控制1. 使用for in来进行遍历比如一个范围内的数字数组中的元素或者字符串中的字符当遍历字典的时候其会返回一个元组如果不需要序列中的值可以直接使用下划线来代替while循环和OC大体上保持一致需要注意的是OC中的do while 在swift中repeat while更加强大的switch语句在swift中其switch不会贯穿匹配不需要类似于OC来添加break在执行完第一个case后其就会推出如果需要匹配多个值需要使用逗号分隔同时还可以使用区间运算符其支持区间匹配可以使用元组来测试多个值_代表任意值switch case 可以使用where分句来检查条件控制转移continue 跳过当前循环break结束当前控制流fallthrouth 使的switch语句获得像OC一样的特性return一般作为函数返回使用throw抛出errorguardguard语句只有为真的时候才能继续向下执行函数其总是存在一个else分支如果guard语句为假执行这个分支guard wjmIsHunsum else {}函数swift中的每一个函数都有类型由函数的形式参数类型和返回类型组成你可以像swift中其余类型那样使用他func myFunc(name: String) - String { return hello world }可以传入多个参数用逗号分隔如果你想返回多个值可以使用元组在swift中可以指定实际参数标签在形式参数名之前写实际参数名称用空格分隔如果不想使用实际函数标签可以使用_来表示省略如果定义了默认值你可以在调用的时候省略这个参数可变形式参数只可以在函数内部改变如果想影响到函数外部可以使用inout关键字在调用的时候需要在参数前 函数类型每一个函数都有其特定函数类型它是由形式参数函数类型返回类型组成比如(Int, Int) - Int你可以像使用swift中的其余类型一样来使用函数类型比如可以作为形式参数可以作为返回值同时我们还可以在一个函数内部定义另外一个函数称为内嵌函数闭包和闭包表达式全局函数和内嵌函数实际上就是特殊的闭包闭包符合下面三种函数的一种1. 全局函数是一个有名字但是不会捕获任意值的闭包2. 内嵌函数是一个有名字且能从上层函数捕获值的闭包3. 闭包表达式是一种轻量级别的语法所写的可以捕获其上下文常量或者变量值没有名字的闭包闭包表达式{ (parameters) - (return type) in statements }单表达式闭包能勾从它们的声明中删除return关键字甚至你可以省略类型让swift帮你做类型推断但是在实际开发中我们应该尽量将代码写完整swift中自动对内提供简写实际参数名称可以通过$0 $1 $2来代替如果你需要一个很长的闭包表达式作为函数的最后一个参数我们可以使用尾随闭包可以将最后一个参数提取出来 使用{ } 来包裹函数体闭包捕获值一个闭包可以从上下文中捕获已经定义的常量或者变量即使已经离开了原作用域但是闭包内依旧可以使用强引用捕获同时如果闭包捕获的值没有发生改变实际上使用的拷贝不是捕获如果你分配了一个闭包给类实例的属性并且闭包通过引用该实例或者他的成员来捕获实力就会产生循环引用逃逸闭包和自动闭包当闭包作为一个实际参数传递给一个函数的时候并且会在函数返回后调用我们称这个闭包逃逸了需要在其形式参数前 escaping来表示如果闭包逃逸你需要显式的引用self自动闭包是一种自动创建的用来把作为实际参数传递给函数的表达式进行打包当其被调用的时候返回内部打包的表达式的值public func assert(_ condition: autocloure () - Bool) { print(\(condition)) }

相关新闻

Unreal Engine 4核心概念解析:PlayerController——玩家意志与游戏世界的连接桥梁

Unreal Engine 4核心概念解析:PlayerController——玩家意志与游戏世界的连接桥梁

Unreal Engine 4核心概念解析:PlayerController——玩家意志与游戏世界的连接桥梁 理解PlayerController,掌握UE4中玩家输入处理与游戏逻辑控制的完整机制 引言:从Pawn控制到PlayerController的体系升级 在完成了UE4核心概念系列的前六篇学习笔记后(UObject→Class→Actor…

2026/7/10 7:10:13 阅读更多 →
高达2070TFLOPS算力|腾视科技基于NVIDIA Jetson Thor系列模组,重磅推出全栈AI边缘智算大脑解决方案

高达2070TFLOPS算力|腾视科技基于NVIDIA Jetson Thor系列模组,重磅推出全栈AI边缘智算大脑解决方案

在科技飞速发展的当下,物理AI与机器人领域正迎来一场前所未有的变革。腾视科技紧跟时代步伐,基于NVIDIA Jetson Thor系列模组,重磅推出全栈AI边缘智算大脑解决方案,以高达2070TFLOPS的AI算力性能,为行业发展注入强大动…

2026/7/10 13:49:39 阅读更多 →
赶deadline必备! 8个一键生成论文工具测评:自考毕业论文+格式规范全攻略

赶deadline必备! 8个一键生成论文工具测评:自考毕业论文+格式规范全攻略

在当前快节奏的学术环境中,无论是自考学生还是其他学习者,撰写论文都面临时间紧张、格式混乱、内容缺乏逻辑等挑战。尤其是在临近毕业或考试的关键阶段,如何高效完成一篇符合规范的高质量论文,成为许多人的刚需。为此,…

2026/7/9 9:16:29 阅读更多 →

最新新闻

腾讯开源了一个新项目,用起来真优雅!

腾讯开源了一个新项目,用起来真优雅!

TDesign简介 TDesign是腾讯开源的一套完整企业级设计体系,提供了基于Vue 2/Vue 3/React/微信小程序/Flutter/UniApp等多个技术栈的组件库解决方案。 TDesign的特性主要体现在以下方面: 完整:同时覆盖桌面端和移动端,提供Figma、…

2026/7/11 6:46:59 阅读更多 →
LV3296与PIC18LF4553嵌入式条码扫描系统设计解析

LV3296与PIC18LF4553嵌入式条码扫描系统设计解析

1. LV3296与PIC18LF4553硬件系统架构解析在嵌入式条码扫描系统中,LV3296作为核心扫描模块与PIC18LF4553微控制器的协同设计是关键。LV3296采用先进的CMOS图像传感技术,其内部集成三个关键子系统:500万像素全局快门传感器、专用DSP解码引擎和多…

2026/7/11 6:46:59 阅读更多 →
Prompt 注入防护实战:用户输入要先清洗再拼接进提示词

Prompt 注入防护实战:用户输入要先清洗再拼接进提示词

Prompt 注入防护实战:用户输入要先清洗再拼接进提示词 一、当用户输入变成指令:Prompt 注入的真实攻击面 推理 API 接收一个系统提示词和用户输入,拼成完整 prompt 发送给模型。这是最常见的 AI 应用架构。问题是——如果用户输入里包含了指令…

2026/7/11 6:42:57 阅读更多 →
自动化产线国产传感器采购,福州防断线款工艺优化方案参考

自动化产线国产传感器采购,福州防断线款工艺优化方案参考

【深度拆解】防断线红尾套传感器:福州国产产线如何攻克“非计划停机”顽疾(附TCO优化方案) 在工业自动化产线上,最让设备工程师头疼的往往不是那些昂贵的大型设备,而是一个几十块钱的传感器——因为它的线缆断裂&#…

2026/7/11 6:40:56 阅读更多 →
会员自动续费找不到退款入口怎么办?2026最新解析

会员自动续费找不到退款入口怎么办?2026最新解析

什么是“续费藏挺深啊”续费藏挺深啊是专为安卓用户打造的第三方自动续费查询与管理工具,通过独立扫描引擎自动扫描安卓设备中所有已安装应用,精准筛查隐藏的自动续费签约协议。与其他方案不同,它不依赖手机系统自带功能,支持一键…

2026/7/11 6:38:52 阅读更多 →
TTL/RS232/RS485 电平转换芯片选型指南:3种场景实测与5个关键参数对比

TTL/RS232/RS485 电平转换芯片选型指南:3种场景实测与5个关键参数对比

TTL/RS232/RS485 电平转换芯片实战选型:3大场景解析与5维参数横评在嵌入式系统开发中,不同电平标准的设备互联一直是硬件工程师的必修课。当STM32的TTL UART需要连接工控机的RS232端口,或者多个RS485传感器要组网时,电平转换芯片就…

2026/7/11 6:36:50 阅读更多 →

日新闻

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:02:12 阅读更多 →
PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

PIC18F45K42驱动EPT-14A4005P压电蜂鸣器方案详解

1. 项目背景与核心需求 在工业控制、安防系统和智能家居等领域,可靠的声音警报系统是不可或缺的基础组件。传统蜂鸣器存在音量不足、音质模糊等问题,而基于压电陶瓷技术的EPT-14A4005P蜂鸣器配合PIC18F45K42微控制器,能够构建一套适应性强、音…

2026/7/11 0:04:12 阅读更多 →
大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm + Attention 的 CUDA Kernel 手写与验证

大模型推理中的算子融合优化:LayerNorm Attention 的 CUDA Kernel 手写与验证 一、GPU 利用率 30%:分开的算子吃掉所有带宽 推理服务的 GPU 利用率监测显示一个反直觉的现象:计算核心(SM)利用率不到 30%,但…

2026/7/11 0:04:12 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/10 19:03:29 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/9 13:46:46 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/9 21:41:05 阅读更多 →

月新闻