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

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必须存在案例以确保涵盖所有可能的值。

总结

让我们总结一下:

  1. Swift 具有用于进行算术和比较的运算符;它们的工作方式大多像您已经知道的那样。

  2. 算术运算符有复合变体,可以就地修改其变量:+=、、-=等等。

  3. 您可以使用ifelseelse if根据条件的结果运行代码。

  4. Swift 有一个三元运算符,它将检查与 true 和 false 代码块结合起来。虽然你可能在其他代码中看到它,但我不建议你自己使用它。

  5. 如果有多个条件使用相同的值,则使用switch后者通常会更清楚。

  6. 您可以使用..<和来制定范围,...具体取决于是否应排除或包含最后一个数字。

相关文章:

IOS Swift 从入门到精通:算术运算,运算符重载,符合赋值运算,比较运算,条件,结合条件,三元运算,Swift语句,范围运算

目录 算术运算符 运算符重载 复合赋值运算符 比较运算符 条件 结合条件 三元运算符 Switch 语句 范围运算符 总结 算术运算符 现在您已经了解了 Swift 中的所有基本类型&#xff0c;我们可以开始使用运算符将它们组合在一起。运算符是那些像和 这样的小数学符号-&…...

Flutter开发环境搭建和调试

[你的Flutter文件夹路径]\flutter\bin 这样我们的Flutter SDK的环境变量就配置完毕了。接下来在命令提示符窗口中输入命令&#xff1a; flutter doctor 它可以帮助我们检查Flutter环境变量是否设置成功&#xff0c;Android SDK是否下载以及配置好环境变量等等。如果有相关的…...

【IC验证】UVM实验lab03

1. TLM端口的创建、例化与使用 创建&#xff1a; uvm_get_blocking_port #(fmt_trans) mon_bp_port; 例化&#xff1a; function new(string name "mcdf_refmod", uvm_component parent);super.new(name, parent);fmt_trans new("fmt_trans", this);…...

document.write()方法总结

document.write()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;document.write()方法是JavaScript中用于向HTML文档写入内容的方法之一。它允许我们在…...

C#循环语句总结

前言 正所谓磨刀不误砍柴工&#xff0c;C#上位机软件开发能力的提升离不开对C#语法的精通&#xff0c;本文接着讲解C#语法知识中的循环语句&#xff0c;在C#程序开发中我们经常会用到各种循环语句&#xff0c;常见的有for循环、while循环&#xff0c;本文就是对C#中用到的各种…...

Spring-bean

Spring 网站&#xff1a;spring.io 两个方面&#xff1a; 简化开发&#xff1a; IoCAOP 框架整合&#xff1a; MyBatis SpringFrameWork系统架构&#xff08;上层依赖下层&#xff09; 解决问题&#xff08;代码耦合度高——模块与模块之间的依赖程度&#xff09; 目标&am…...

Linux常用命令(14)—查看文件内容(有相关截图)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;记录一下学习Linux常用命令的过程&#xff0c;方便以后复习。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;评论&#xf…...

【html】用html+css实现银行的账户信息表格

我们先来看一看某银行的账户信息表格 我们自己也可以实现类似的效果 效果图: 大家可以看到&#xff0c;其实效果差不多 接下来看看我们实现的代码 源码&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"&…...

两种单例模式(保证线程安全)

开始前&#xff0c;球球各位读者给个三连吧&#xff0c;有错误感谢指出&#xff0c;谢谢 单例模式也叫单个实例&#xff0c;也就是这个类只有且只能有一个实例对象&#xff0c;这样一个类就叫做“单例”&#xff1b;单例模式有很多种&#xff0c;这里只介绍“饿汉模式”和“懒…...

开发 Golang 项目的 Docker 化案例

开发 Golang 项目的 Docker 化案例 在这个案例中&#xff0c;我们将展示如何使用 Docker 容器化一个简单的 Golang Web 应用。我们将创建一个基于 Go 的 Hello World 应用&#xff0c;并使用 Docker 和 Docker Compose 管理容器化环境。 1. 创建 Golang Web 应用 首先&#…...

PHP面试宝典之Laravel篇

Laravel简介 Laravel是一种优雅的PHP Web应用程序框架&#xff0c;它具有简洁、优雅的语法&#xff0c;并提供了强大的工具用于构建大型、健壮的应用程序。Laravel采用了现代PHP开发的最佳实践&#xff0c;因此深受开发者欢迎。 Laravel面试常见问题 1. 什么是Laravel中间件…...

自动驾驶仿真:Carsim转向传动比设置

文章目录 一、转向传动比概念二、设置转向传动比1、C factor概念2、Steer Kinematics概念3、传动比计算公式 三、转向传动比验证 一、转向传动比概念 转向传动比&#xff08;Steering Ratio&#xff09;表示方向盘转动角度与车轮转动角度之间的关系。公式如下&#xff1a; 转向…...

PyTorch nn.CrossEntropyLoss() 交叉熵损失函数详解和要点提醒

文章目录 前置知识nn.CrossEntropyLoss() 交叉熵损失参数数学公式带权重的公式&#xff08;weight&#xff09;标签平滑&#xff08;label_smoothing&#xff09; 要点 附录参考链接 前置知识 深度学习&#xff1a;关于损失函数的一些前置知识&#xff08;PyTorch Loss&#x…...

DW学习笔记|数学建模task2

本章主要涉及到的知识点有&#xff1a; 微分方程的解法如何用 Python 解微分方程偏微分方程及其求解方法微分方程的基本案例差分方程的求解数值计算方法元胞自动机 2.1 微分方程的理论基础 微分方程是什么&#xff1f;如果你参加过高考&#xff0c;可能在高三备考中遇到过这…...

【大数据 复习】第9章 数据仓库分析工具Hive

一、概念 1.概述 &#xff08;1&#xff09;Hive是一个构建于Hadoop顶层的数据仓库工具。 &#xff08;2&#xff09;某种程度上可以看作是用户编程接口&#xff0c;本身不存储和处理数据。 &#xff08;3&#xff09;依赖分布式文件系统HDFS存储数据。 &#xff08;4&#xf…...

ionic7 从安装 到 项目启动最后打包成 apk

报错处理 在打包的时候遇到过几个问题&#xff0c;这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 说明 由于之前使用的是 ionic 3&#xff0c;当时打包的…...

setInterval 定时任务执行时间不准验证

一般在处理定时任务的时候都使用setInterval间隔定时调用任务。 setInterval(() > {console.log("interval"); }, 2 * 1000);我们定义的是两秒执行一次&#xff0c;但是浏览器实际执行的间隔时间只多不少。这是由于浏览器执行 JS 是单线程模式&#xff0c;使用se…...

Stable Diffusion Model网站

Civitai Models | Discover Free Stable Diffusion Modelshttps://www.tjsky.net/tutorial/488https://zhuanlan.zhihu.com/p/610298913超详细的 Stable Diffusion ComfyUI 基础教程&#xff08;一&#xff09;&#xff1a;安装与常用插件 - 优设网 - 学设计上优设 (uisdc.com)…...

K8S - 实现statefulset 有状态service的灰度发布

什么是灰度发布 Canary Release 参考 理解 什么是 滚动更新&#xff0c;蓝绿部署&#xff0c;灰度发布 以及它们的区别 配置partition in updateStrategy/rollingUpdate 这次我为修改了 statefulset 的1个yaml file statefulsets/stateful-nginx-without-pvc.yaml: --- apiVe…...

Qt 技术博客:深入理解 Qt 中的 delete 和 deleteLater 与信号槽机制

在 Qt 开发中&#xff0c;内存管理和对象生命周期的处理是至关重要的一环。特别是在涉及信号和槽机制时&#xff0c;如何正确删除对象会直接影响应用程序的稳定性。本文将详细讨论在使用 Qt 的信号和槽机制时&#xff0c;delete 和 deleteLater 的工作原理&#xff0c;并给出最…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...