IOS Swift 从入门到精通:算术运算,运算符重载,符合赋值运算,比较运算,条件,结合条件,三元运算,Swift语句,范围运算
目录
算术运算符
运算符重载
复合赋值运算符
比较运算符
条件
结合条件
三元运算符
Switch 语句
范围运算符
总结
算术运算符
现在您已经了解了 Swift 中的所有基本类型,我们可以开始使用运算符将它们组合在一起。运算符是那些像+
和 这样的小数学符号-
,Swift 中有大量这样的运算符。
以下是我们可以使用的几个测试变量:
let firstScore = 12
let secondScore = 4
我们可以使用+
和进行加减运算-
:
let total = firstScore + secondScore
let difference = firstScore - secondScore
我们可以使用 和 来做乘法和*
除法/
:
let product = firstScore * secondScore
let divided = firstScore / secondScore
Swift 有一个特殊的运算符用于计算除法后的余数:%
。它计算一个数字可以容纳另一个数字多少次,然后返回剩余的值。
例如,我们设置secondScore
为 4,所以如果我们说13 % secondScore
我们会返回一,因为 4 可以乘以 13 三次,余数为一:
let remainder = 13 % secondScore
运算符重载
Swift 支持运算符重载,这是一种奇特的说法,即运算符的作用取决于您使用它的值。例如,+
像这样对整数求和:
let meaningOfLife = 42
let doubleMeaning = 42 + 42
但+
也会连接字符串,如下所示:
let fakers = "Fakers gonna "
let action = fakers + "fake"
您甚至可以使用它+
来连接数组,如下所示:
let firstHalf = ["John", "Paul"]
let secondHalf = ["George", "Ringo"]
let beatles = firstHalf + secondHalf
请记住,Swift 是一种类型安全的语言,这意味着它不允许您混合类型。例如,您不能将整数添加到字符串,因为这没有任何意义。
复合赋值运算符
Swift 具有将一个运算符与赋值相结合的简写运算符,因此您可以就地更改变量。这些运算符看起来像您知道的现有运算符 - 、、+
和,但它们的末尾有一个,因为它们将结果赋值回您使用的任何变量。-*/=
例如,如果某人考试成绩为 95 分,但需要扣 5 分,你可以这样写:
var score = 95
score -= 5
类似地,你可以使用以下命令将一个字符串添加到另一个字符串+=
:
var quote = "The rain in Spain falls mainly on the "
quote += "Spaniards"
比较运算符
Swift 有几个执行比较的运算符,它们的工作方式或多或少与您在数学中期望的类似。
让我们从几个示例变量开始,以便我们能够进行一些工作:
let firstScore = 6
let secondScore = 4
有两个运算符用于检查相等性:==
检查两个值是否相同,以及!=
(发音为“不等于”)检查两个值是否不相同:
firstScore == secondScore
firstScore != secondScore
有四种运算符用于比较一个值是否大于、小于或等于另一个值。它们就像数学中的一样:
firstScore < secondScore
firstScore == secondScore
这些方法也适用于字符串,因为字符串具有自然的字母顺序:
"Taylor" <= "Swift"
条件
现在您知道了一些运算符,您可以使用语句编写条件if
。您为 Swift 提供一个条件,如果该条件为真,它将运行您选择的代码。
为了尝试这一点,我想使用一个名为的 Swift 函数print()
:你用一些文本运行它,然后它将被打印出来。
我们可以使用条件来检查二十一点牌是否获胜:
let firstCard = 11
let secondCard = 10
if firstCard + secondCard == 21 {
print("Blackjack!")
}
如果条件为真,则将运行括号 –{
和–内的代码 。如果您愿意,可以提供在条件为假时运行的替代代码,使用:}else
if firstCard + secondCard == 21 {
print("Blackjack!")
} else {
print("Regular cards")
}
您还可以使用以下方式将条件链接在一起else if
:
if firstCard + secondCard == 2 {
print("Aces – lucky!")
} else if firstCard + secondCard == 21 {
print("Blackjack!")
} else {
print("Regular cards")
}
结合条件
Swift 有两个特殊运算符可以让我们将条件组合在一起:它们是&&
(发音为“and”)和||
(发音为“or”)。
例如,我们可以检查两个人的年龄是否都超过某个值,如下所示:
let age1 = 12
let age2 = 21
if age1 > 18 && age2 > 18 {
print("Both are over 18")
}
只有当两个年龄都超过 18 岁时才会发生该print()
调用,但事实并非如此。事实上,Swift 甚至不会费心检查 的值,age2
因为它可以看到age1
已经失败了测试。
的替代方法&&
是||
,如果任一项目通过测试,则评估结果为真。例如,如果任一年龄超过 18 岁,我们可以打印一条消息:
if age1 > 18 || age2 > 18 {
print("At least one is over 18")
}
您可以在单一条件中多次使用&&
and ,但不要使事情变得太复杂,否则可能很难阅读!||
三元运算符
Swift 有一个很少使用的运算符,称为三元运算符。它一次处理三个值,这就是它的名字的由来:它检查第一个值中指定的条件,如果条件为真,则返回第二个值,如果条件为假,则返回第三个值。
三元运算符是一个条件加上 true 或 false 块,中间用问号和冒号分隔,这使得它很难阅读。以下是一个例子:
let firstCard = 11
let secondCard = 10
print(firstCard == secondCard ? "Cards are the same" : "Cards are different")
它会检查两张卡片是否相同,然后如果条件为真,则打印“卡片相同”,如果条件为假,则打印“卡片不同”。我们可以使用常规条件编写相同的代码:
if firstCard == secondCard {
print("Cards are the same")
} else {
print("Cards are different")
}
Switch 语句
如果您有多个使用if
和 的条件else if
,通常使用称为 的不同构造会更清楚switch case
。使用这种方法,您只需编写一次条件,然后列出所有可能的结果以及每个结果应该发生的情况。
为了尝试这一点,这里有一个包含字符串的天气常量sunny
:
let weather = "sunny"
我们可以使用一个switch
块来打印四种不同消息之一:
switch weather {
case "rain":
print("Bring an umbrella")
case "snow":
print("Wrap up warm")
case "sunny":
print("Wear sunscreen")
default:
print("Enjoy your day!")
}
在该示例中,最后一个案例 – default
– 是必需的,因为 Swift 会确保涵盖所有可能的情况,以免遗漏任何可能发生的情况。如果天气不是雨、雪或晴天,default
则会运行该案例。
Swift 只会运行每个 case 中的代码。如果希望继续执行下一个 case,请使用fallthrough
如下关键字:
switch weather {
case "rain":
print("Bring an umbrella")
case "snow":
print("Wrap up warm")
case "sunny":
print("Wear sunscreen")
fallthrough
default:
print("Enjoy your day!")
}
范围运算符
Swift 为我们提供了两种创建范围的方法:..<
和...
运算符。半开范围运算..<
符 会创建直到但不包括最终值的范围,而闭范围运算符...
会创建直到并包括最终值的范围。
例如,范围1..<5
包含数字 1、2、3 和 4,而范围1...5
包含数字 1、2、3、4 和 5。
范围对于块非常有用switch
,因为您可以将它们用于每个案例。例如,如果有人参加了考试,我们可以根据他们的分数打印不同的消息:
let score = 85
switch score {
case 0..<50:
print("You failed badly.")
case 50..<85:
print("You did OK.")
default:
print("You did great!")
}
与以前一样,default
必须存在案例以确保涵盖所有可能的值。
总结
让我们总结一下:
-
Swift 具有用于进行算术和比较的运算符;它们的工作方式大多像您已经知道的那样。
-
算术运算符有复合变体,可以就地修改其变量:
+=
、、-=
等等。 -
您可以使用
if
、else
和else if
根据条件的结果运行代码。 -
Swift 有一个三元运算符,它将检查与 true 和 false 代码块结合起来。虽然你可能在其他代码中看到它,但我不建议你自己使用它。
-
如果有多个条件使用相同的值,则使用
switch
后者通常会更清楚。 -
您可以使用
..<
和来制定范围,...
具体取决于是否应排除或包含最后一个数字。
相关文章:
IOS Swift 从入门到精通:算术运算,运算符重载,符合赋值运算,比较运算,条件,结合条件,三元运算,Swift语句,范围运算
目录 算术运算符 运算符重载 复合赋值运算符 比较运算符 条件 结合条件 三元运算符 Switch 语句 范围运算符 总结 算术运算符 现在您已经了解了 Swift 中的所有基本类型,我们可以开始使用运算符将它们组合在一起。运算符是那些像和 这样的小数学符号-&…...
Flutter开发环境搭建和调试
[你的Flutter文件夹路径]\flutter\bin 这样我们的Flutter SDK的环境变量就配置完毕了。接下来在命令提示符窗口中输入命令: flutter doctor 它可以帮助我们检查Flutter环境变量是否设置成功,Android SDK是否下载以及配置好环境变量等等。如果有相关的…...
【IC验证】UVM实验lab03
1. TLM端口的创建、例化与使用 创建: uvm_get_blocking_port #(fmt_trans) mon_bp_port; 例化: function new(string name "mcdf_refmod", uvm_component parent);super.new(name, parent);fmt_trans new("fmt_trans", this);…...
document.write()方法总结
document.write()方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!document.write()方法是JavaScript中用于向HTML文档写入内容的方法之一。它允许我们在…...
C#循环语句总结
前言 正所谓磨刀不误砍柴工,C#上位机软件开发能力的提升离不开对C#语法的精通,本文接着讲解C#语法知识中的循环语句,在C#程序开发中我们经常会用到各种循环语句,常见的有for循环、while循环,本文就是对C#中用到的各种…...
Spring-bean
Spring 网站:spring.io 两个方面: 简化开发: IoCAOP 框架整合: MyBatis SpringFrameWork系统架构(上层依赖下层) 解决问题(代码耦合度高——模块与模块之间的依赖程度) 目标&am…...
Linux常用命令(14)—查看文件内容(有相关截图)
写在前面: 最近在学习Linux命令,记录一下学习Linux常用命令的过程,方便以后复习。仅供参考,若有不当的地方,恳请指正。如果对你有帮助,欢迎点赞,关注,收藏,评论…...
【html】用html+css实现银行的账户信息表格
我们先来看一看某银行的账户信息表格 我们自己也可以实现类似的效果 效果图: 大家可以看到,其实效果差不多 接下来看看我们实现的代码 源码: <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"&…...
两种单例模式(保证线程安全)
开始前,球球各位读者给个三连吧,有错误感谢指出,谢谢 单例模式也叫单个实例,也就是这个类只有且只能有一个实例对象,这样一个类就叫做“单例”;单例模式有很多种,这里只介绍“饿汉模式”和“懒…...
开发 Golang 项目的 Docker 化案例
开发 Golang 项目的 Docker 化案例 在这个案例中,我们将展示如何使用 Docker 容器化一个简单的 Golang Web 应用。我们将创建一个基于 Go 的 Hello World 应用,并使用 Docker 和 Docker Compose 管理容器化环境。 1. 创建 Golang Web 应用 首先&#…...
PHP面试宝典之Laravel篇
Laravel简介 Laravel是一种优雅的PHP Web应用程序框架,它具有简洁、优雅的语法,并提供了强大的工具用于构建大型、健壮的应用程序。Laravel采用了现代PHP开发的最佳实践,因此深受开发者欢迎。 Laravel面试常见问题 1. 什么是Laravel中间件…...
自动驾驶仿真:Carsim转向传动比设置
文章目录 一、转向传动比概念二、设置转向传动比1、C factor概念2、Steer Kinematics概念3、传动比计算公式 三、转向传动比验证 一、转向传动比概念 转向传动比(Steering Ratio)表示方向盘转动角度与车轮转动角度之间的关系。公式如下: 转向…...
PyTorch nn.CrossEntropyLoss() 交叉熵损失函数详解和要点提醒
文章目录 前置知识nn.CrossEntropyLoss() 交叉熵损失参数数学公式带权重的公式(weight)标签平滑(label_smoothing) 要点 附录参考链接 前置知识 深度学习:关于损失函数的一些前置知识(PyTorch Loss&#x…...
DW学习笔记|数学建模task2
本章主要涉及到的知识点有: 微分方程的解法如何用 Python 解微分方程偏微分方程及其求解方法微分方程的基本案例差分方程的求解数值计算方法元胞自动机 2.1 微分方程的理论基础 微分方程是什么?如果你参加过高考,可能在高三备考中遇到过这…...
【大数据 复习】第9章 数据仓库分析工具Hive
一、概念 1.概述 (1)Hive是一个构建于Hadoop顶层的数据仓库工具。 (2)某种程度上可以看作是用户编程接口,本身不存储和处理数据。 (3)依赖分布式文件系统HDFS存储数据。 (4…...
ionic7 从安装 到 项目启动最后打包成 apk
报错处理 在打包的时候遇到过几个问题,这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 说明 由于之前使用的是 ionic 3,当时打包的…...
setInterval 定时任务执行时间不准验证
一般在处理定时任务的时候都使用setInterval间隔定时调用任务。 setInterval(() > {console.log("interval"); }, 2 * 1000);我们定义的是两秒执行一次,但是浏览器实际执行的间隔时间只多不少。这是由于浏览器执行 JS 是单线程模式,使用se…...
Stable Diffusion Model网站
Civitai Models | Discover Free Stable Diffusion Modelshttps://www.tjsky.net/tutorial/488https://zhuanlan.zhihu.com/p/610298913超详细的 Stable Diffusion ComfyUI 基础教程(一):安装与常用插件 - 优设网 - 学设计上优设 (uisdc.com)…...
K8S - 实现statefulset 有状态service的灰度发布
什么是灰度发布 Canary Release 参考 理解 什么是 滚动更新,蓝绿部署,灰度发布 以及它们的区别 配置partition in updateStrategy/rollingUpdate 这次我为修改了 statefulset 的1个yaml file statefulsets/stateful-nginx-without-pvc.yaml: --- apiVe…...
Qt 技术博客:深入理解 Qt 中的 delete 和 deleteLater 与信号槽机制
在 Qt 开发中,内存管理和对象生命周期的处理是至关重要的一环。特别是在涉及信号和槽机制时,如何正确删除对象会直接影响应用程序的稳定性。本文将详细讨论在使用 Qt 的信号和槽机制时,delete 和 deleteLater 的工作原理,并给出最…...
自学鸿蒙HarmonyOS的ArkTS语言<一>基本语法
一、一个ArkTs的目录结构 二、一个页面的结构 A、装饰器 Entry 装饰器 : 标记组件为入口组件,一个页面由多个自定义组件组成,但是只能有一个组件被标记 Component : 自定义组件, 仅能装饰struct关键字声明的数据结构 State:组件中的状态变量…...
【OpenGauss源码学习 —— (ALTER TABLE(列存修改列类型))】
ALTER TABLE(列存修改列类型) ATExecAlterColumnType 函数1. 检查和处理列存储表的字符集:2. 处理自动递增列的数据类型检查:3. 处理生成列的类型转换检查:4. 处理生成列的数据类型转换: build_column_defa…...
【大数据 复习】第7章 MapReduce(重中之重)
一、概念 1.MapReduce 设计就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动,数据需要大量的网络传输开销。 2.Hadoop MapReduce是分布式并行编程模型MapReduce的开源实现。 3.特点 (1)非共享式,…...
Zookeeper:节点
文章目录 一、节点类型二、监听器及节点删除三、创建节点四、监听节点变化五、判断节点是否存在 一、节点类型 持久(Persistent):客户端和服务器端断开连接后,创建的节点不删除。 持久化目录节点:客户端与Zookeeper断…...
生产级别的 vue
生产级别的 vue 拆分组件的标识更好的组织你的目录如何解决 props-base 设计的问题transparent component (透明组件)可减缓上述问题provide 和 inject vue-meta 在路由中的使用如何确保用户导航到某个路由自己都重新渲染?测试最佳实践如何制…...
kafka(五)spring-kafka(1)集成方法
一、集成 1、pom依赖 <!--kafka--><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId></dependency><dependency><groupId>org.springframework.kafka</groupId><artif…...
Java中的设计模式深度解析
Java中的设计模式深度解析 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在软件开发领域,设计模式是一种被广泛应用的经验总结和解决方案&#x…...
鸿蒙 HarmonyOS NEXT星河版APP应用开发—上篇
一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网:https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议:软件和依赖安装目录不要使用中文字符软件安装包下载完成后࿰…...
[FreeRTOS 基础知识] 互斥访问与回环队列 概念
文章目录 为什么需要互斥访问?使用队列实现互斥访问休眠和唤醒机制环形缓冲区 为什么需要互斥访问? 在裸机中,假设有两个函数(func_A, func_B)都要修改a的值(a),那么将a定义为全局变…...
音视频的Buffer处理
最近在做安卓下UVC的一个案子。正好之前搞过ST方案的开机广告,这个也是我少数最后没搞成功的项目。当时也有点客观原因,当时ST要退出机顶盒市场,所以一切的支持都停了,当时啃他家播放器几十万行的代码,而且几乎没有文档…...
有了域名之后如何做网站/青岛网络优化费用
原标题:大一新生开学,父母需给配“电脑”吗?辅导员:这4个专业必须有文/晓梅妈妈聊育儿每一年高考成绩出来后,有人欢喜有人愁,毕竟不是每一个考上都能取得高分,考上一所重点大学,而对…...
Mac日历发布到wordpress/网站排名优化首页
说明:首先说明自己在开发中遇到的坑 (1)没有将itppay_cert.pem文件没有放到指定目录下 (2)异步回调调用参数的时候没有在线上测试, (3)项目里面被设置了路由访问权限,自己…...
做服务的网站起名/原画培训机构哪里好
发现Mathematica中应用Inverse求逆时出错。转载于:https://www.cnblogs.com/zdwt/p/9289103.html...
网站空间租赁 香港/南宁网站seo大概多少钱
山西大同大学数学与计算机科学学院是于2006年在山西大同大学组建后成立的,前身是雁北师范学院数学系。学校坐落于历史文化名城、煤海之乡山西大同。校园占地面积2292.82亩,建筑面积612605.43平方米,中外文藏书180.19万余册,中外文…...
网站建设开发维护/微商软文
最近在一个 Vue 的项目中重构功能时,遇到一个有趣的问题,场景是通过接口动态获取名称并显示在下拉列表中,第一次实现的代码如下:但这样写代码可扩展性很低,例如这时候需要添加一个查询用户身份的下拉框就要再写一个方法…...
wordpress 伪静态 tag/西安百度关键词排名服务
导读:1、什么是经验主义,管理中的经验主义2、保持开放心态,向年轻人学习3、学会逆向思维,发扬创新精神01什么是经验主义,管理中的经验主义“我走过的桥比你走过的路多,我吃的盐比你吃的米都多”,…...