技术标签: 函数内修改外部变量的值 函数类型 Swift函数的参数 Swift高级进阶 Swift函数的定义 函数的嵌套
func pi() -> Double {
return 3.1415
}
pi()
// 求和
//
// 将两个整数相加
// - Parameters:
// - v1: v1 第一个整数
// - v2: v2 第二个整数
// - Returns: 2个整数的和
//
// - Note : 传入2个整数即可
func sum(v1: Int,v2: Int) -> Int {
v1 + v2
}
sum(v1: 10, v2: 20)
func calculate(v1: Int,v2: Int) -> (sum: Int,diffence: Int,average: Int) {
let sum = v1+v2
return(sum,v1-v2,sum>>1)
}
let result = calculate(v1: 20, v2: 10)
result.sum
result.diffence
result.average
result.0
result.1
result.2
// 函数标签的案例
func goToWork(at time: String) {
// 内部语义化:this time is time
print("this time is \(time)")
}
goToWork(at: "08:00")
// 外部语义化:go to work at 08:00
// 省略参数标签
func sum(_ v1: Int, _ v2: Int) -> Int {
v1 + v2
}
sum(10, 20)
func check(name: String = "nobody", age: Int,job: String = "none") -> () {
print("name=\(name),age=\(age),job=\(job)")
}
check(age: 18)
check(name: "wy", age: 18, job: "iOS")
check(age: 18,job: "iOS")
ame=nobody,age=18,job=none
name=wy,age=18,job=iOS
name=nobody,age=18,job=iOS
func sum(_ numbers: Int...) -> Int {
var total = 0
for number in numbers {
total += number
}
return total
}
sum(10,20,30,40)
sum(10, 20)
// inout的使用
func swapValues(_ v1: inout Int, _ v2: inout Int) -> Void {
let tmp = v1
v1 = v2
v2 = tmp
}
var num1 = 10
var num2 = 20
swapValues(&num1, &num2) // 传入地址(其实就是指针,虽然Swift中没有指针变量的概念)
// 数据类型为:()->() 或者()->Void
func test(){
print("lalala")
}
// 数据类型为:(Int,String) -> (Int,Double)
func test2(a: Int,b: String) -> (Int,Double) {
return(7,7.0)
}
//(Int,Int) -> Int
func sum2(a:Int,b:Int) -> Int {
a+b
}
// 1、通过函数的数据类型定义一个函数变量
var fn: (Int,Int) -> Int;
// 2、赋值一个函数
fn = sum2(a:b:)
// 3、调用
fn(2,3)
// 加法
func sum3(v1: Int, v2: Int) -> Int {
v1+v2
}
// 减法
func difference(v1: Int,v2: Int) -> Int {
v1-v2
}
// 通过传入的函数和对变量进行对应的加减操作
// (Int, Int) -> Int 是mathFn参数的数据类型
func printResult(_ mathFn: (Int, Int) -> Int , _ a: Int, _ b:Int) {
print("Result: \(mathFn(a,b))")
}
printResult(sum, 20, 10)
printResult(difference, 20, 10)
// +1
func next(_ input: Int) -> Int {
input + 1
}
// -1
func previous(_ input: Int) -> Int {
input - 1
}
// 通过传入的Bool值判断返回哪个函数
// (Int) -> Int是返回值类型,是个函数类型,因此返回函数
// 因为返回的是函数所以只写名称,不需要带参数
func forward(_ forward: Bool) -> (Int) -> Int {
forward ? next : previous
}
forward(true)(3) // 4
forward(false)(4) // 2
import Cocoa
func calcDecrement(forDecrement total: Int) -> () -> Int {
var overallDecrement = 0
func decrementer() -> Int {
overallDecrement -= total
return overallDecrement
}
return decrementer
}
let decrem = calcDecrement(forDecrement: 30)
print(decrem())
-30
文章浏览阅读626次。原标题:2021年,华为开始规划自有操作系统“鸿蒙”。2019年5月24日,国家知识产权局商标局网站显示,华为已申请“华为鸿蒙”商标,申请日期是2018年8月24日,注册公告日期是2019年5月14日,专用权限期是从2019年5月14日到2029年5月13日。 2019年5月17日,由任教授领导的华为操作系统团队开发了自主产权操作系统——鸿蒙。2019年8月9日,华为正式发布鸿蒙系统。同时余承东也..._鸿蒙系统正式上市时间是哪一年
文章浏览阅读438次。03.符号库设计与实现流程图#####引用类库及接口描述引用类库:ESRI.ArcGIS.Carto:包括一些数据显示的接口和类,如ILegend,IMap,ILayerESRI.ArcGIS.Geodatabase:提供操作地理数据库的接口,如IWorkspace,IDataset,IFeatureESRI.ArcGIS.DataSourcesFile:提供打开矢量数据的接口..._ae符号库设计与实现
文章浏览阅读1k次。首先确认安装JDK8及以上版本,确认已安装ZooKeeper,ZooKeeper-3.4.12安装步骤第一步:下载Kafka下载地址选择 kafka_2.11-2.0.0.tgz版本,复制到安装目录,解压缩第二步:修改配置文件# borker的编号,如果集群中有多个,则每个borker需设置不同的编号broker.id=0#broker对外提供服务入口的端口(默认9092)listeners=PLAINTEXT://:9092#存放消息日志文件地址log.dirs=/data/ho_kafka2.0安装
文章浏览阅读3.7k次,点赞3次,收藏7次。我们知道最早监听网络变化,是通过广播,静态或动态注册广播,处理"android.net.conn.CONNECTIVITY_CHANGE"这个action就可以了intent就可以了。我们发现"android.net.conn.CONNECTIVITY_CHANGE"这个action已经加了注解@Deprecated,不推荐使用了。根据注释说明,7.0及以上静态注册广播(manifest中)..._android.net.conn.connectivity_change
文章浏览阅读291次。开个坑_bytetrack+yolov5 c++
文章浏览阅读4.8k次,点赞12次,收藏39次。fatal error: filesystem: 没有那个文件或目录_fatal error: filesystem: no such file or directory
文章浏览阅读625次。上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现方式上,内核的高分辨率定时器的实现代码几乎没有借用低分辨率定时器的数据结构和代码,内核文档给出的解释主要有以下几点:_timekeeping_delta_to_ns
文章浏览阅读591次。本文主要是语音合成模型实验结果经验总结!!首先列出实验过的所有模型Tacotron&Tacotron2Bark(E2E)VITS/VITS2E2EMB-iSTFT-VITSE2E)_use_duration_discriminator
文章浏览阅读7.6k次,点赞7次,收藏22次。MVVM框架的介绍_android mvvm
文章浏览阅读591次。第四章 选择结构程序设计例1:输入两个实数,按由小到大的顺序输出这两个数#include<stdio.h>int main(){ float a,b,c,t;scanf("%f,%f,%f",&a,&b,&c); if(a>b) { _c语言第四章作业
文章浏览阅读4.7w次,点赞16次,收藏76次。方式一:官网prebuild版本sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pclsudo apt-get updatesudo apt-get install libpcl-all可能是因为国内的关系,并没有更新 apt-get 成功方式二:安装 prebuilt DEB file for PCL 1.8_pcl1.8+ubuntu16.04安装详解
文章浏览阅读6.9k次,点赞6次,收藏9次。计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System。解决win11 文件拖到任务栏无法打开的问题。实测win11家庭版、专业版均可以使用。系统更新到最新版也可以使用。win11中重新设置一个账户,不要使用Administrator账户,使用普通账户即可打开。重启后即可 正常使用。文件拖到任务栏即可打开。可能遇到的问题解决。1.依旧无法拖拽打开。2.依旧无法拖拽打开。3.注册表不会修改。_win11文件拖到任务栏打不开