整理一个 10分钟掌握 Swift 的精华指南,用一个 Demo 串联 Swift 的核心语法、数据结构、函数、类/结构体和闭包,让你快速入门。


1️⃣ 基础语法与变量

import Foundation  // 引入基础库// 变量和常量
var name: String = "Alice"    // 可变
let age: Int = 25             // 不可变// 类型推断
var height = 1.68             // 自动推断为 Doubleprint("Name: \(name), Age: \(age), Height: \(height)")

✅ Swift 核心点:

  • var 可变,let 不可变

  • 支持类型推断

  • 字符串插值 \(变量)


2️⃣ 控制流

// 条件语句
if age >= 18 {print("\(name) is adult")
} else {print("\(name) is minor")
}// 循环
for i in 1...5 {       // 闭区间print("i = \(i)")
}var j = 0
while j < 3 {print("j = \(j)")j += 1
}

✅ 核心:

  • if-elsefor-inwhile

  • 1...5 表示闭区间(包含 1 和 5),1..<5 表示左闭右开


3️⃣ 函数与闭包

// 函数
func add(_ a: Int, _ b: Int) -> Int {return a + b
}print("10 + 20 = \(add(10, 20))")// 闭包(匿名函数)
let multiply: (Int, Int) -> Int = { (x, y) inreturn x * y
}
print("3 * 4 = \(multiply(3, 4))")

✅ 核心:

  • func 定义函数

  • _ 表示调用时省略参数名

  • 闭包是 Swift 的函数式编程核心


4️⃣ 数组与字典

// 数组
var numbers = [3, 1, 4, 1, 5]
numbers.append(9)
numbers.sort()
print("Numbers: \(numbers)")// 字典
var scores = ["Alice": 95, "Bob": 88]
scores["Charlie"] = 90
for (name, score) in scores {print("\(name): \(score)")
}

✅ 核心:

  • Swift 有强类型数组 [Type] 和字典 [Key: Value]

  • for-in 可遍历数组和字典


5️⃣ 结构体与类

// 结构体
struct Point {var x: Intvar y: Intfunc printPoint() {print("(\(x), \(y))")}
}// 类
class Person {var name: Stringvar age: Intinit(name: String, age: Int) {self.name = nameself.age = age}func greet() {print("Hello, I'm \(name), \(age) years old")}
}let p1 = Point(x: 1, y: 2)
p1.printPoint()let person = Person(name: "Alice", age: 25)
person.greet()

✅ 核心:

  • struct 默认值类型,class 是引用类型

  • init 构造函数

  • 方法直接写在结构体或类中


6️⃣ 可选类型(Optional)

var optionalName: String? = "Bob"
print(optionalName ?? "No name")   // nil 合并运算符if let realName = optionalName {print("Name exists: \(realName)")
} else {print("Name is nil")
}

✅ 核心:

  • ? 表示可能为空

  • if let 安全解包


7️⃣ 高阶用法:map / filter / reduce

let nums = [1, 2, 3, 4, 5]
let squared = nums.map { $0 * $0 }       // [1,4,9,16,25]
let even = nums.filter { $0 % 2 == 0 }   // [2,4]
let sum = nums.reduce(0) { $0 + $1 }     // 15print(squared, even, sum)

✅ 核心:

  • Swift 内置高阶函数,方便函数式编程


8️⃣ 总结 Swift 核心点

功能Swift 表达
变量/常量var / let
类型推断var x = 10
条件/循环iffor-inwhile
函数func add(a,b) -> Int
闭包{ (x,y) in x*y }
数组/字典[Type] / [Key: Value]
类/结构体class / struct
可选类型? / if let
高阶函数mapfilterreduce

我们仔细拆解这行 Swift 代码,其他都很简单,不再赘述:

let sum = nums.reduce(0) { $0 + $1 }

nums.reduce(0) 是什么?

  • nums 是一个数组,例如:

let nums = [1, 2, 3, 4, 5]
  • reduce 是 高阶函数,作用是 把数组里的元素“累积”成一个值

  • 0 是 初始值,表示累加的起点。

  • { $0 + $1 } 是一个闭包(匿名函数),用于定义 如何累加每个元素


闭包 { $0 + $1 } 含义

  • $0 表示当前累积值(初始值开始是 0)

  • $1 表示数组当前遍历的元素

  • { $0 + $1 } 就是把累积值加上当前元素,并返回新的累积值。


执行过程(以 [1,2,3,4,5] 为例)

步骤累积值 $0当前元素 $1计算 $0+$1新累积值
初始010 + 11
2121 + 23
3333 + 36
4646 + 410
510510 + 515

最终,reduce 返回 15,赋值给 sum


总结

  • reduce(initial) { closure } 可以把数组元素“折叠”为一个值。

  • $0 = 累积值,$1 = 当前元素。

  • 上面这行代码等价于传统循环:

var sum = 0
for n in nums {sum += n
}

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

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

相关文章

【完整源码+数据集+部署教程】食品分类与实例分割系统源码和数据集:改进yolo11-AggregatedAttention

背景意义 研究背景与意义 随着全球食品产业的快速发展&#xff0c;食品安全和质量控制日益成为社会关注的焦点。食品分类与实例分割技术的应用&#xff0c;能够有效提升食品识别的准确性和效率&#xff0c;为食品监管、营养分析以及智能餐饮等领域提供重要支持。传统的食品识别…

C# 中的N+1问题

目录 含义 影响 避免方法 1. 立即加载&#xff08;Eager Loading&#xff09; 2. 显式加载&#xff08;Explicit Loading&#xff09; 3. 投影&#xff08;Projection&#xff09; 4. 批处理查询 5. 禁用延迟加载 含义 N1 问题 是 ORM&#xff08;对象关系映射&#x…

国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家

多光谱相机是一种能够同时捕捉多个特定波段的光谱信息&#xff0c;这些波段覆盖可见光、近红外以及短波红外等区域。广泛应用于遥感、农业、环境监测、工业检测、安防等领域。近年来&#xff0c;我国在多光谱技术领域取得了显著进步&#xff0c;涌现出一批技术实力强、产品性能…

如何用外部电脑访问本地网页?

之前本来说用内网穿透工具来查看完成这个工具&#xff0c;结果感觉各种不符合心意&#xff0c;突然发现有更简单的方法。如果想让两台电脑在 同一局域网 内都能访问运行在 http://localhost:5174/ 上的项目&#xff0c;而不需要使用内网穿透工具&#xff0c;可以通过以下方法实…

PromptPilot — AI 自动化任务的下一个环节

作者:陈大鱼头 github:https://github.com/KRISACHAN 邮箱:chenjinwen77@gmail.com PromptPilot 体验地址:https://promptpilot.volcengine.com/ 前言 如果大家有关注 AI 相关新闻的话,一定会知道在 2025 年 6 月 11 日火山引擎 FORCE 原动力大会上,豆包大模型 1.6 系列…

[Responsive theme color] 动态更新 | CSS变量+JS操控 | 移动端-汉堡菜单 | 实现平滑滚动

第3章&#xff1a;CSS变量操控 欢迎回来&#x1f43b;‍❄️ 通过前两章&#xff0c;我们掌握了 动态主题定制 的交互逻辑&#xff0c;以及 色彩工具函数 如何实现色值格式转换。 本章将揭示技术拼图的最后一块&#xff1a;CSS变量动态操控&#xff0c;解析JavaScript如何实…

数学建模 15 逻辑回归与随机森林

逻辑回归&#xff08;用于分类&#xff09;用途&#xff1a;通过已有数据&#xff0c;计算出线性方程的参数w后&#xff0c;可以用于预测某一个物品属于某一类的概率&#xff0c;[0,1];求解思想&#xff1a;逻辑回归通过最大似然估计&#xff08;Maximum Likelihood Estimation…

衡石使用指南嵌入式场景实践之仪表盘嵌入

应用展示交互 应用集市展示应用时会与仪表盘、图表进行交互操作&#xff0c;主要包括去分析、保存当前过滤快照、字段设置、刷新、全屏、嵌入、导出等功能。 保存当前过滤快照 仪表盘展示数据时往往使用过滤器来查看不同场景下的分析数据。用户从一种场景切换到另一种场景&a…

Qt | 四种方式实现多线程导出数据功能

前言 在以往的项目开发中&#xff0c;在很多地方用到了多线程。针对不同的业务逻辑&#xff0c;需要使用不同的多线程实现方法&#xff0c;来达到优化项目的目的。本文记录下在Qt开发中用到的多线程技术实现方法&#xff0c;以导出指定范围的数字到txt文件为例&#xff0c;展示…

运放的学习笔记以及一些用法的个人看法

负反馈形成了虚短。 你的输出会对-极产生一个向上的电压&#xff0c;当你的-的时候就两边相等了&#xff0c;这个时候就输出就不变了&#xff0c;也就是负反馈调节&#xff0c;调节了左边的电压差 如果你的右边输出已经达到了12v或者0v这个时候你就饱和了&#xff0c;这个时候…

MySQL的三大范式:

目录 键和相关属性的概念&#xff1a; 第一范式&#xff1a; 第二范式&#xff1a; 第三范式&#xff1a; 总结&#xff1a; 反范式化&#xff1a; 在关系型数据库中&#xff0c;关于数据表设计的基本原则&#xff0c;规则就称为范式。 范式是关系数据库理论的基础&…

如何解决pip安装报错ModuleNotFoundError: No module named ‘imageio’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘imageio’问题 摘要 在Python开发过程中&#xff0c;尤其是使用PyCharm等IDE时&#xff0c;遇到pip install报错是一个常见的问题&#xff0c;尤其是在执行安装…

2025年高效能工程项目管理软件推荐榜单:AI重构工程进度可视化与资源动态调度体系

在工程行业数字化深度变革的2025年,项目管理正面临前所未有的挑战与机遇。权威数据显示,68%的工程项目因进度追踪滞后导致交付延期,超半数企业因数据孤岛陷入跨部门协同效率低下的困境,而资源错配造成的隐性成本损失高达年度预算的15%。随着AI决策引擎、BIM全流程融合、IoT物联…

豆包 Java的23种设计模式

Java的23种设计模式是软件开发中常用的设计思想总结&#xff0c;根据用途可分为三大类&#xff1a;创建型、结构型和行为型。 一、创建型模式&#xff08;5种&#xff09; 用于处理对象创建机制&#xff0c;隐藏创建逻辑&#xff0c;使程序更灵活。 单例模式&#xff1a;保证一…

Redis7学习--详解哨兵,文件配置、主客观下线

目录 一、前言 二、哨兵 1、是什么&#xff1f; 2、哨兵的功能 3、案例演示 Redis Sentinel 架构 配置说明 哨兵配置文件 主从配置文件 主节点宕机后各节点状态 主从切换后配置文件的自动调整 4、哨兵运行流程和选举原理 SDOWN主观下线 ODOWN客观下线 选出新的主节…

Android 项目:画图白板APP开发(二)——历史点、数学方式推导点

上一章我们讲解了如何绘制顺滑、优美的曲线&#xff0c;为本项目的绘图功能打下了基础。本章我们将深入探讨两个关键功能的实现&#xff1a;历史点和数学方式推导点。这些功能将大幅提升我们白板应用的专业性和用户体验。一、History点之前在onTouchEvent中获取的MotionEvent&a…

25. for 循环区别

1. 基本 for 循环 for (let i 0; i < 10; i) {console.log(i); }特点&#xff1a; 适用于已知循环次数的情况使用数字索引进行迭代可以精确控制循环过程性能最好&#xff0c;开销最小 2. for…in 循环 // 数组示例 for (let i in [1, 2, 3]) {console.log(i, typeof i); //…

Trae 辅助下的 uni-app 跨端小程序工程化开发实践分享

大家好&#xff0c;我是不如摸鱼去&#xff0c;欢迎来到我的AI编程分享专栏。 这次来分享一下&#xff0c;我使用 Trae 作为主要AI编程工具&#xff0c;开发 uni-app 跨平台小程序的完整实践经验。我在实际的开发过程中&#xff0c;探索了 Trae 辅助开发的具体应用场景和效果&…

Vue3 + Element Plus 人员列表搜索功能实现

设计思路使用Element Plus的el-table组件展示人员数据 在姓名表头添加搜索图标按钮 点击按钮弹出搜索对话框 在对话框中输入姓名进行搜索 实现搜索功能并高亮匹配项下面是完整的实现代码&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><…

告别手动优化!React Compiler 自动记忆化技术深度解析

概述 React Compiler 是 React 团队开发的一个全新编译器&#xff0c;目前处于 RC&#xff08;Release Candidate&#xff09;阶段。这是一个仅在构建时使用的工具&#xff0c;可以自动优化 React 应用程序&#xff0c;无需重写任何代码即可使用。 核心特性 自动记忆化优化 …