Swift学习笔记2——基本类型和基本运算

本文详细介绍了Swift编程语言的基本数据类型,包括整型、浮点型、布尔型,以及进制表示和科学计数法。此外,文章还深入探讨了Swift中的元组(Tuple)和可选类型(Optionals)的概念与应用。文中详细解释了如何创建、解包和使用元组,以及可选类型如何帮助处理方法返回空值的情况。同时,文章涵盖了Swift中的基本运算符,如算术运算、比较运算和逻辑运算,并介绍了Swift中独特的取模运算符。最后,文章介绍了Swift中的范围运算符和单范围运算符的使用方法。

基本类型

其实和C差不多,也就是那几个。多出来的是Tuple和可选类型这两个概念


数字类型

这里记录一下每个类型的大小。

Int 在32位机器上是Int32 ,在64位机器上是Int64. 除了Int之外,还有Int,Int8,Int16,Int32,Int64.

UInt在32位机器上是UInt32 ,在64位机器上是UInt64.   除了UInt之外,还有UInt8,UInt16,UInt32,UInt64.

Double  64位浮点数

Float  32位浮点数

Swift不支持数字类型之间的自动转换。必须显式手动转换。

var i: Int = 2_000   //这个表示2000
var d: Double = 5.3
var e = d * Double(i)

不同进制的前缀

十进制       没有

二进制        0b

八进制        0o

十六进制     0x

科学计数

1.25e2 代表  1.25乘上10的2次方

0xFp2  代表   15乘上2的2次方

typealias 关键字,用来个类型起别名

typealias ii = Int8
var mm = ii.min //这里的ii代表了Int8

Boolean 类型

Swift和java一样,对boolean类型是强要求的,不能在if里面传一个整形用于判断。



新类型——元组(Tuple)

其实就是一群数据组合,可以将其解出来输出。注意的是tuple不只是两个元素,你可以自己扩展成多个元素。

var menu = ("apple", 20)  //定义一个Tuple
var menu2 = (name: "banana", price:10)  //可以在定义的时候指定元素名字
let (name,price) = menu   //解Tuple,如果某个元素不想要的话,用 _ 代替
print(name, price)   //输出  apple 20
print(menu.0,menu.1)  //不解Tuple直接输出
print(menu2.name,menu2.price)  //利用元素名字解Tuple


可选类型(Optionals)

当一个方法可以返回一个对象的时候,它有可能返回一个空值。比如将字符串转换为数字的方法。为了处理这种情况,有了可选类型。

可选类型表示一个数据,它可能有值,也可能为空。基本语法是在类型的后面加上问号 ?

比如下面的代码

var str:String
print(str)  //这里报错说str没初始化
但是如果将str改为可选类型,那么这就可以输出了

var str:String?
print(str)  //输出 nil

那怎么将一个可选类型转换为对应的类型呢?这里有个强制解包的概念,使用 ! 对可选类型解包。请看下面代码。 强制解包有个注意点,就是如果这个可选类型是nil的话,那么强制解包的语句会在运行时报错。

var str:String? = "fe"
var s = str! //将str解包为s,但是如果str没有赋值的话,那么这句会在运行时报错
print(s)

为了解决强制解包的时候,可选类型可能为nil的问题。if语句里面多了一个 Optional Binding 的概念。就是将可选类型解包后判断是否为nil,然后执行不同的分支代码

//因为没给str赋值,所以输出  str为空
var str:String?
if let s = str {
    print("str有值")
} else {
    print("str为空")
}


        如果在编程中,我们可以确保可选类型一定不为nil的,那么每次要将可选类型解包都要加个 !,很麻烦。所以有了隐式可选类型,它是用 ! 代替了 ? 号。然后在需要将可选类型转换为对应类型的时候就不用加 ! 了

var str:String! = "string"
var s = str



基本运算

一些和C完全一样的基本运算如下

加减乘除,负号,自增(++)自减(--),+=等, 判断大小之类(==,!=,>=...),三元运算符,逻辑运算(!,&&,||)


不一样的运算符

取模%,在C中,只能对整形进行运算,Swift中可以对浮点数进行运算。结果就是多出来的那部分

比如 7.1%2.5  得到2.1,因为7.1可以最多减去2个2.5,然后剩下2.1


范围运算符 ... 和 ..< 这两个运算符可以用在for里面。比如

//输出 1 2 3    包含最后一个元素3
for i in 1...3 {
    print(i)
}
//输出 1 2  不包含最后一个元素3
for i in 1..<3 {
    print(i)
}


单范围运算符

对于下标运算可以这样用。

let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names[2...] {
    print(name)
}
// Brian
// Jack
 
for name in names[...2] {
    print(name)
}
// Anna
// Alex
// Brian
for name in names[..<2] {
    print(name)
}
// Anna
// Alex



??

这是一个二元运算符,例子 a ?? b

它的意思是:如果可选类型a不是nil,那么解包a并返回解包值,如果a为nil,那么返回b

相当于 a != nil ? a! : b

第 1 章 Lin u x 安 全 渗 透 简 介 1.1 什 么 是 安 全 渗 透 1.2 安 全 渗 透 所 需 的 工 具 1.3 K ali Lin u x 简 介 1.4 安 装 K ali Lin u x 1.5 K ali更 新 与 升 级 1.6 基 本 设 置 第 2 章 配 置 K ali Lin u x 2.1 准 备 内 核 头 文 件 2.2 安 装 并 配 置 N VIDIA 显 卡 驱 动 2.3 应 用 更 新 和 配 置 额 外 安 全 工 具 2.4 设 置 P r o x y C h ain s 2.5 目 录 加 密 第 3 章 高 级 测 试 实 验 室 3.1 使 用 V M w a r e W o r k s t a tio n 3.2 攻 击 W o r d P r e s s 和 其 他 应 用 程 序 第 4 章 信 息 收 集 4.1 枚 举 服 务 4.2 测 试 网 络 范 围 4.3 识 别 活 跃 的 主 机 4.4 查 看 打 开 的 端 口 4.5 系 统 指 纹 识 别 4.6 服 务 的 指 纹 识 别 4.7 其 他 信 息 收 集 手 段 4.8 使 用 M alt e g o 收 集 信 息 4.9 绘 制 网 络 结 构 图 第 5 章 漏 洞 扫 描 5.1 使 用 N e s s u s 5.2 使 用 O p e n VA S 第 6 章 漏 洞 利 用 6.1 M e t a s ploit a ble 操 作 系 统 6.2 M e t a s ploit 基 础 6.3 控 制 M e t e r p r e t e r 6.4 渗 透 攻 击 应 用 大 学 霸 K ali Lin u x 安 全 渗 透 教 程 2 6.5 7 7.1 7.2 7.3 7.4 8 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 6.5 免杀Payload生成工具Veil 第7章 权限提升 7.1 使用假冒令牌 7.2 本地权限提升 7.3 使用社会工程学工具包(SET) 7.4 使用SET实施攻击 第8章 密码攻击 8.1 密码在线破解 8.2 分析密码 8.3 破解LM Hashes密码 8.4 绕过Utilman登录 8.5 破解纯文本密码工具mimikatz 8.6 破解操作系统用户密码 8.7 创建密码字典 8.8 使用NVIDIA计算机统一设备架构(CUDA) 8.9 物理访问攻击 第9章 无线网络渗透测试 9.1 无线网络嗅探工具Kismet 9.2 使用Aircrack-ng工具破解无线网络 9.3 Gerix Wifi Cracker破解无线网络 9.4 使用Wifite破解无线网络 9.5 使用Easy-Creds工具攻击无线网络 9.6 在树莓派上破解无线网络 9.7 攻击路由器 9.8 Arpspoof工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值