iOS开发 Swift 速记4:函数与闭包

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客

C#是我多年以来的业余爱好,新搞的东西能用C#的就用C#了。


系列入口:iOS开发 Swift 速记1:变量和基本数据类型-CSDN博客

目录

一、函数

二、不定参数

三、参数传递

示例代码

四、函数用作变量(闭包Closure)


一、函数

func 函数名(外部名 内部名:类型 = 默认值,下一个参数)->返回值类型{语句}

函数调用时要写参数名,仍然需要按照参数顺序写,可以跳过有默认值的参数

外部名默认和内部名相同

外部名为_则调用时无需使用外部名

可以没有返回值

返回值可以是Optiaonal类型,推荐用nil表示出错

二、不定参数

参数名后加...

内部使用按照集合,参数调用逗号分隔(param1:1,2,3,param2:)

三、参数传递

参数按照值类型和引用类型分别值传递和引用传递

值类型如果要修改需要inout (参数名:inout 类型)

调用时变量名前面加& (参数名:&变量名)

示例代码

以下代码演示了跳过有默认值的参数:

Swift 复制代码
func fun1( a:Int,b : Int = 5 ,c:Int)->Int{print(String(a+b));return a+b+c}
var x=fun1(a:3,c:3)
print(x)

以下代码演示了不定参数:

Swift 复制代码
func fun2(a:Int...,b:String)->String
{
    var sum:Int = 0;
    for param in a
    {
        sum += param
    }
    return b+" \(a.count) \(sum)"
}
print(fun2(a:1,2,3,4,5,b:"fun2="))

四、函数用作变量(闭包Closure)

函数类型 (参数类型,)->返回值类型

函数变量赋值 = {(参数列表) in 语句} 非得弄个in吗?这部分叫闭包

也可以用正常编写的函数赋值 = 函数名

函数类型声明的参数不可以有名字,调用时不可加标签(因为调用只和类型声明有关)

函数可以作为参数,也可以作为返回值(就是函数变量)

以下代码演示了函数用作变量:

Swift 复制代码
var fun3:(Int)->Int
fun3 = {(a:Int) in return 2*a}
print(fun3(5))

全局函数也是闭包的一种形式,但函数的格式比较正规,闭包有各种简写形式

闭包可以直接赋值给变量,也可在传递参数时直接定义,直接定义时可省略参数类型

作为函数参数时如果只有一行,可以省略return

闭包可以省略返回值声明,自动从return分析返回值

最简洁是只写语句,用0、1来引用参数 例如比较大小{ 0\<1 }

如果最后一个参数是闭包,可以整个闭包挪到后面 f(a,{闭包}) 写成 f(a){闭包}

如果只有一个参数且是闭包,写成 f{闭包}

自动闭包 @autoclosure 放在参数声明的冒号后 ,允许在调用时直接传入表达式

声明参数为可逃逸闭包(用做函数返回值) @escaping


(这里是文档结束)

相关推荐
MayZork16 分钟前
Qt 文件操作:QSaveFile 与 QTemporaryFile(含 QTemporaryDir)实战
开发语言·qt
北冥you鱼28 分钟前
Go 语言空接口(interface{})使用场景与最佳实践
开发语言·windows·golang
xh didida38 分钟前
Linux -- 基础IO
linux·服务器·开发语言·c++
个 人 练 习 生1 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
2601_966949651 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
坤坤子吖1 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_19861 小时前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
weixin199701080162 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
ACP广源盛139246256732 小时前
Type‑C 扩展坞方案选型笔记|国产 DP1.4 转 HDMI2.0 桥接芯片 GSV2201S @ACP评估
c语言·开发语言·笔记·硬件架构·硬件工程·国产芯片
niucloud-admin2 小时前
JAVA V6 多商户商城 开发文档——JAVA服务端
java·开发语言