Swift--基本运算符与程序流程控制

news2024/12/22 23:57:42

系列文章目录

第一章:量值与基本数据类型
第二章:字符、字符串与集合类型


文章目录

  • 系列文章目录
  • 空合并运算符
  • 区间运算符
  • 循环结构
    • while与repeat-while条件循环结构


空合并运算符

可选值类型是Swift语言的一个独特之处,空合并运算符就是针对可选值类型而设计的运算符


var q:Int? = 8
var value:Int
if q != nil {
    value = q!
} else {
    value = 0
}
var q:Int? = 8
var value:Int
value = (q != nil) ? (q!) : 0

Swift语言中还提供了空合并运算符来更加简洁地处理这种Optional类型值的条件选择结构,空合并运算符由“??”表示

空合并运算符“??”是一个二元运算符,使用空合并运算符改写后的代码更加简洁。其需要两个操作数,第一个操作数必须为一个Optional值,如果此Optional值不为nil,则将其进行拆包操作,并作为空合并运算的运算结果。如果此Optional值为nil,则会将第二个操作数作为空合并操作运算的结果返回。使用空合并操作符来处理有关Optional值的选择逻辑将十分方便

区间运算符


//表示大于0小于10的范围
index > 0 && index < 10
//创建范围>= 0 且<= 10的闭区间
var range1 = 0...10
//创建范围>= 0且<10的半开区间
var range2 = 0..<10


//判断8是否在range1中
print(range1 ~= 8)

区间运算符常见于for-in循环结构中

//a...b为闭区间写法
for index in 0...3 {
    print(index)
}
//a..<b为左闭右开区间
for index in 0..<3 {
    print(index)
}

循环结构

for index in 1...5 {
    print(index)
}

for-in结构中需要两个参数,第2个参数可以是一个集合类型的实例,也可以是一个范围区间,第1个参数为捕获参数,每次从第2个参数中遍历出的元素便会赋值给它,开发者在循环结构中可以直接使用


var collection1:Array = [1, 2, 3, 4]
var collection2:Dictionary = [1:1, 2:2, 3:3, 4:4]
var collection3:Set = [1, 2, 3, 4]
for obj in collection1 {
    print(obj)
}
for (key, value) in collection2 {
    print(key, value)
}
for obj in collection3 {
    print(obj)
}

while与repeat-while条件循环结构

只是Swift语言将do-while结构修改为repeat-while

var i = 0
//当i不小于10的时候跳出循环
while i < 10 {
    print("while", i)
    //进行i的自增
    i = i + 1
}

在这里插入图片描述

var j = 0
//先执行一次循环体, 在判断循环条件是否成立
repeat {
    print("repat while")
    j = j + 1
} while j < 10

var c = 10
//进行if判断
if c < 10 {
    print(c)
}
//进行if-else组合
if c > 10 {
    c = c - 10
    print(c)
} else {
    print(c)
}
//进行if-else多分支组合
if c > 0 && c < 10 {
    print(c)
} else if c <= 10 {
    c = -c
    print(c)
} else if c <= 10 && c < 20 {
    c = c - 10
    print(c)
} else {
    print("bigger")
}
var charac = "a"
switch charac {
case "a":
    print("chara is a")
case "b":
    print("chara is b")
case "c":
    print("chara is c")
default:
    print("no chara")
}

在C/Objective-C语言中,case语句不会因匹配成功而中断,如果不进行手动控制,switch结构中的case子句会依次进行匹配执行
switch-case结构也支持开发者在一个case子句中编写多个匹配条件,程序在执行到这个case子句时,只要有一个条件匹配成功,就会执行此case下的代码


var charac = "a"
switch charac {
case "a", "b", "c":
    print("chara is word")
case "1", "2", "3":
    print("chara is num")
default:
    print("no chara")
}

case子句的匹配条件也可以是一个区间范围,当要匹配的参数在这个区间范围内时,就会执行此case下的代码

var num = 3
switch num {
case 1...3:
    print("1 <= num <= 3")
    
case 4:
    print("chara is num")
default:
    print("no charac")
    
}

在进行元组的匹配时,有3种方式可以选择:第1种方式是完全匹配,即元组中所有元素都必须完全相等,才算匹配成功;第2种方式是选择匹配,即开发者只需要指定元组中的一些元素进行匹配,不需要关心的元素可以使用匿名参数标识符来代替,这种方式下,只要指定的参数都相等,就算匹配成功;第三种方式是范围匹配,即相应位置指定的范围包含需匹配元组相应位置的值,就算匹配成功。其中第2种匹配方式可以和第3种匹配方式组合使用。

var tuple = (0, 0)
switch tuple {
case(0, 1):
    print("sure")
case (_, 1):
    print("Sim")
case (0...3, 0...3):
    print("SIM")
default:
    print("")
}

var tuple = (0, 0)
//进行数据绑定
switch tuple {
case (let a, 1):
    print(a)
case (let b, 0):
    print(b)
case let(a, b):
    print(a, b)
default:
    print("")
}

//对于进行了数据捕获的Switch-case结构, 可以使用where关键字来进行条件判断
switch tuple {
case (let a, 1):
    print(a)
case (let b, 0) where b == 0:
    print(b)
case let(a, b) where a == b:
    print(a, b)
default:
    print("")
}
//对于进行了数据捕获的Switch-case的结构,可以使用where关键字来进行条件判断
switch tuple {
case (let a, 1):
    print(a)
case (let b, 0) where b == 0:
    print(b)
//当元祖中的两个元素相同时,才会进入下面的case
case let(a, b) where a == b:
    print(a, b)
default:
    print("")
}

for index in 0...9 {
    if index == 6 {
        continue
    }
    print("第几次循环")
}

上面的示例代码将跳过index等于6时的代码块,在打印信息中会缺少index等于6时的打印输出

MyLabel:for indexI in 0...2 {
    for indexJ in 0...2 {
        if indexI == 1 {
            continue MyLabel
        }
        print("第几次循环")
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

个微协议开发/微信个人号二次开发/ipad协议/api接口

E云管家&#xff0c;是完整的第三方服务平台&#xff0c;并基于IPAD协议8.0.37开发出的最新个微API服务框架。 你可以 通过API 实现 个性化微信功能 &#xff08;例云发单助手、社群小助手、客服系统、机器人等&#xff09;&#xff0c;用来自动管理微信消息。用户仅可一次对接…

得帆低代码OMS助力SAP和Oracle ERP订单模块全线升级,感受非凡体验

场景背景 随着数字化转型进入深水区&#xff0c;智能化、移动化、可视化的需求越来越强烈&#xff0c;而传统的Oracle、SAP销售模块很难快速满足销售端的上述需求&#xff0c;逐渐面临如下痛难点&#xff1a; IT服务商响应不足&#xff1a;企业越来越多信息化的业务需要大量的供…

30岁之前透支,30岁之后还债。

前言 看到不少私信问我为啥没有更新了&#xff0c;我没有一一回复&#xff0c;实在是身体抱恙&#xff0c;心情沉重&#xff0c;加上应付于工作&#xff0c;周旋于家庭&#xff0c;自然挤压了自我空间。 今天思来想去&#xff0c;重新执键&#xff0c;决定久违地又一次写点分…

Windows如何正确设置PHP环境变量以在Git Bash中运行命令

1、随便找一个目录&#xff0c;鼠标右键打开git bash here 2、cd的根目录 3、找到php安装目录 4、 在根目录下打开 vim .bash_profile &#xff0c;添加环境变量&#xff0c;php地址根据自己的本地地址而定 PATH$PATH:/d/phpstudy_pro/Extensions/php/php7.3.4nts 添加后保存…

【解刊】IEEE(trans),中科院2区,顶刊,CCF-A类,圈外人别想投?

计算机类 • 好刊解读 今天小编带来IEEE旗下计算机领域好刊的解读&#xff0c;如有相关领域作者有意向投稿&#xff0c;可作为重点关注&#xff01;后文有真实发表案例&#xff0c;供您投稿参考~ 01 期刊简介 IEEE Transactions on Computers ☑️出版社&#xff1a;IEEE …

V-Ray效果图渲染出的画面发黄显脏?三种快速解决材质溢色的办法

小伙伴们在制作效果图时&#xff0c;有时候会遇到场景整体发黄&#xff0c;画面显脏不干净的情况。其实造成这种情况的原因之一就是出现了材质溢色问题&#xff0c;即饱和度高的材质对饱和度低的材质产生溢色&#xff0c;渲染出来的效果图会出现失真现象。 这个时候千万别用覆盖…

如何为VM虚拟机添加D盘

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 在虚拟机上安装Windows10 系统后&…

RocketMQ 如何保证消息正常【投递】和【消费】

消息整体处理过程&#xff0c;这里我们将消息的整体处理阶段分为3个阶段进行分析&#xff1a;1、Producer发送消息阶段。 2、Broker处理消息阶段。 3、Consumer消费消息阶段。一、Producer发送消息阶段 1、安全机制保障1&#xff0c;发送方式。 1、同步发送 2、异步发送 3、O…

1000道精心打磨的计算机考研题,408小伙伴不可错过

提示&#xff1a;408考研人看过来&#xff0c;超精选计算机考研1000题&#xff01; 文章目录 前言1. 为什么是1000题&#xff1f;2. 有什么优势&#xff1f;【练学结合&#xff0c;助力强化】【难度适中&#xff0c;但不刁钻】【题目新颖&#xff0c;独具匠心】【考题预测&…

解决任务栏卡死

近期许多Win10用户反映在开机进入系统后遇到了任务栏卡顿、无法正常使用的问题&#xff0c;虽然桌面能够正常操作&#xff0c;但任务栏问题依然影响了用户的使用体验。 对“Windows资源管理器”进行重启 你可以尝试按下“CtrlAltDel”快捷键&#xff0c;打开“任务管理器”&a…

一款好用的jpeg分析软件 JPEGsnoop

最近解码器解码jpeg的时候出了问题&#xff0c;为了追踪问题&#xff0c;找到了这款免费好用的jpeg分析软件- JPEGsnoop。 顶礼膜拜。 贴上链接地址&#xff1a; https://github.com/ImpulseAdventure/JPEGsnoop/releases 上面已经有编译好的win10 exe了 下载后解压&#x…

小红书app拉新校园版本地网推项目修改政策了 附一手官签渠道

小红书app拉新深受现在地推作业人员和网推作业人员还有校园推广项目的喜爱&#xff0c;简单价格高 可以通过”聚量推客“申请小红书校园版项目拉新 以下为最新价格政策和介绍&#xff0c;需要7天内活跃&#xff0c;按照活跃天数进行结算

为什么笔记不收录,小红书作品收录逻辑分析!

小红书作品收录问题&#xff0c;是平台大家广泛关注的问题。这是因为&#xff0c;一篇作品是否被有效收录&#xff0c;将会直接决定作品所能捕获的流量。今天给大家分享下为什么笔记不收录&#xff0c;小红书作品收录逻辑分析&#xff01; 一、作品收录是指什么 小红书平台的作…

开通和配置支付宝支付完整教程

开通和配置支付宝支付 登录支付宝 1.进入支付宝商家中心 支付宝商家中心-国内领先的第三方支付和金融服务平台 进入产品中心 2.点击产品中心 找到网站支付,进行申请接入支付,如果已经开通请跳过 进入开放中心 3.进入支付宝商家开发者中心登录 - 支付宝 创建应用 4.点击创…

了解 SwiftUI 中 StoreKit 2 新功能

文章目录 前言配置项目构建支付功能总结 前言 StoreKit 为我们提供了通过应用程序获得收入的机会。它允许我们设置应用内购买和订阅的购买流程。StoreKit 2 引入了一种基于现代 Swift 的 API&#xff0c;用于构建类型安全的应用内购买。下面我们将开始关于 StoreKit 2 的系列文…

Clickhouse学习笔记(14)—— Clickhouse监控

ClickHouse 运行时会将一些个自身的运行状态记录到众多系统表中&#xff0c;如下所示&#xff1a; 为了直观方便地监控ck的运行情况&#xff0c;使用Prometheus Grafana 的组合来进行监控 Prometheus 负责收集各类系统的运行指标&#xff1b;Grafana 负责可视化 Prometheus&a…

ASUS华硕ROG枪神2笔记本GL504GS原厂Win10预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1sqm9NXopSe_mg8v--7fzzA?pwd9dru 提取码&#xff1a;9dru 原厂系统自带显卡网卡声卡等所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家、控制中心等预装程序 由于时间关系,绝大部分资料…

轻量封装WebGPU渲染系统示例<23>- 可渲染对象添加到多个渲染Pass节点(源码)

渲染和计算混合系统&#xff0c; 可以看做基于算力驱动设计理念的一种实现。 此系统中&#xff0c;可渲染(rendering)/计算(computing)实体可以任意添加到一个渲染器pass节点。若干个这样的节点相关联&#xff0c;就能构成对应的pass node graph&#xff0c;也就实现了整个3D渲…

开播4分钟就被限流的直播回顾!

虽然在双11正式开播之前做过几轮测试&#xff0c;但我们还是踩了坑&#xff01; 而离我们正式开播&#xff0c;才仅仅4分钟而已&#xff01; 双11直播回顾 在双11当天的19:15分&#xff0c;我们开始播放7分半的开播视频&#xff0c;完播两轮之后正好是计划的开播时间。 但…

【KVM-5】KVM架构

前言 大家好&#xff0c;我是秋意零。今天分析的内容是KVM架构。 &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平台同名&#xff0c; 秋意零 账号创作者、 云社区 创建者&#x1f9d1; 个人介绍&#xff1a;在校期间参与…