当前位置: 首页 > news >正文

Swift 函数基础

Swift 函数基础语法

Swift 函数通过func关键字定义,基本语法如下:

func functionName(parameters) -> ReturnType { // 函数体 return value }

示例:无参数函数

func greet() -> String { return "Hello, Swift!" } print(greet()) // 输出 "Hello, Swift!"

示例:带参数的函数

func add(a: Int, b: Int) -> Int { return a + b } print(add(a: 2, b: 3)) // 输出 5

参数标签与外部参数名

Swift 支持为参数添加外部标签,增强可读性:

func greet(person name: String) -> String { return "Hello, \(name)!" } print(greet(person: "Alice")) // 输出 "Hello, Alice!"

忽略外部参数名
使用_省略外部标签:

func multiply(_ a: Int, _ b: Int) -> Int { return a * b } print(multiply(4, 5)) // 输出 20

默认参数值

函数参数可以设置默认值:

func power(_ base: Int, exponent: Int = 2) -> Int { return Int(pow(Double(base), Double(exponent))) } print(power(3)) // 输出 9 (默认 exponent=2) print(power(3, exponent: 3)) // 输出 27

可变参数

使用...表示可变参数:

func sum(_ numbers: Int...) -> Int { var total = 0 for num in numbers { total += num } return total } print(sum(1, 2, 3, 4)) // 输出 10

函数作为参数与返回值

Swift 函数是一等公民,可作为参数或返回值传递:

func applyOperation(_ a: Int, _ b: Int, operation: (Int, Int) -> Int) -> Int { return operation(a, b) } let result = applyOperation(10, 5, operation: { $0 - $1 }) print(result) // 输出 5

返回函数的函数

func chooseOperation(_ isAdd: Bool) -> (Int, Int) -> Int { return isAdd ? (+) : (-) } let operation = chooseOperation(false) print(operation(8, 3)) // 输出 5

嵌套函数

函数可以嵌套定义:

func outerFunction() -> () -> Void { var counter = 0 func innerFunction() { counter += 1 print("Counter: \(counter)") } return innerFunction } let counterFunc = outerFunction() counterFunc() // 输出 "Counter: 1" counterFunc() // 输出 "Counter: 2"

函数重载

Swift 支持函数重载(相同函数名,不同参数类型或数量):

func process(_ value: Int) { print("Processing Int: \(value)") } func process(_ value: String) { print("Processing String: \(value)") } process(42) // 输出 "Processing Int: 42" process("Swift") // 输出 "Processing String: Swift"

泛型函数

使用泛型增强函数灵活性:

func swapValues<T>(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } var x = 10, y = 20 swapValues(&x, &y) print("x=\(x), y=\(y)") // 输出 "x=20, y=10"

逃逸闭包与非逃逸闭包

默认闭包为非逃逸(@noescape),需显式标记逃逸闭包:

var completionHandlers: [() -> Void] = [] func withEscapingClosure(completion: @escaping () -> Void) { completionHandlers.append(completion) } withEscapingClosure { print("Escaping closure executed") } completionHandlers.first?() // 输出 "Escaping closure executed"

自动闭包

延迟求值的闭包:

func debugLog(_ condition: @autoclosure () -> Bool) { if condition() { print("Debug: Condition is true") } } debugLog(1 < 2) // 输出 "Debug: Condition is true"

通过以上示例,可以全面掌握 Swift 函数的核心特性与实际应用场景。

http://www.jsqmd.com/news/488978/

相关文章:

  • 8元搞定Cursor永久账号:手把手教你用域名邮箱绕过限制(附Spaceship购买教程)
  • 以太网详解(七)TCP/IP四层模型与协议栈实战
  • PDSC文件详解:如何为你的MDK软件包编写完美的XML描述
  • Flux Sea Studio 海景摄影生成工具:Agent智能体架构设计——打造自主规划与迭代的海景创作智能体
  • CH552P低成本测温风扇控制器设计
  • OFA-iic/ofa_visual-entailment_snli-ve_large_en保姆级教程:开箱即用GPU推理全流程
  • JS 实现前端给图片加水印 及 叠加图片
  • Torch-TensorRT 相关
  • Android11系统定制实战:如何彻底禁用下拉状态栏(附完整代码修改)
  • 开源渗透测试项目
  • 图片变视频神器Wan2.2-I2V-A14B体验:480P高清流畅,效果惊艳
  • Phi-4-reasoning-vision-15B应用场景:政务办事截图自动分类与材料完整性校验
  • 避开这些坑!亚太杯数学建模A题灌溉系统布线规划实战指南
  • 百川2-13B-Chat WebUI v1.0 入门必看:输入框支持Markdown语法与代码块自动渲染
  • Linux系列七:linux常用命令二
  • 安卓手机抓包神器VNET实战:5分钟搞定京东wskey提取(附青龙面板自动转换教程)
  • vLLM私有化部署实战:从零构建企业级LLM推理服务
  • 2026年口碑好的倒伏照明灯公司推荐:车载自动倒伏照明灯/应急救援倒伏照明灯/野外勘测倒伏照明灯公司精选 - 品牌宣传支持者
  • 习题2.1 简单计算器
  • 数据取证双雄:Passware Kit Forensic 与 ElcomSoft 密码恢复工具的场景化选型指南
  • 模块化嵌入式时钟系统:多源授时与可插拔硬件架构
  • HY-Motion 1.0快速入门:3步搞定3D动作生成,效果惊艳
  • EcomGPT-7B电商知识图谱:Neo4j图数据库集成方案
  • 习题2.2 数组循环左移
  • Web安全攻防实战01:巧用文件包含漏洞获取flag.php
  • Unity中Animator动画结束监听的3种高效实现方案对比
  • 从零到一:基于Easytier构建去中心化虚拟局域网的实战指南
  • RepeatModeler 2.0.7 安装与使用--生信工具75
  • CV论文Ablation Study表格Latex高效排版技巧
  • 基于TI TMS320F28P550的雨滴传感器模块驱动移植与ADC/GPIO应用实战