常量与变量
声明常量与变量
swift
常量声明用let, 变量声明用var
let 在声明的时候必须设定值(或类型标注),且在声明常量后常量就不可以发生更改
var 在声明变量时也必须设定值(或类型标注),但设定后可以再去更改,更改时只能更改同类型的值

更改常量值或者给已声明的变量设置其他类型值都会报错

OC
常量声明用 const, 变量声明用 id
const
const 使用注意点:
const 修饰的是其右边的值,也就是const 右边的这个整体的值不能变。
比如:
使用用法:const NSString *str = @"111";
则*str不能变,str可以变,这时可以使用str = @"222",给str更改值。

但如果使用用法:NSString * const str2 = @"11";
则str2不能变,*str2可以变,这时使用str2 = @"222"就会报错

id
id 声明变量时不用立即设定值,可以后期更改,并且后续可以接受不同类型的值

类型标注
swift
swift 在声明常量和变量时可以进行类型标注,常量进行类型标注后则可以稍后设置初始值,但初始值一但设定就不可以更改。

OC
OC 在声明常量和变量时也有类似的类型标注,比如声明int 类型的常量或者变量可以用
const int maxIndex = 10;//常量
int index = 0;//变量
//声明字符串
const NSString *str = @"aaa";
NSString *name = @"LiLei";
复制代码
输出常量或变量
swift
swift 中使用print 来打印常量或者变量,
比如有个变量为inedx:
- 如果想直接打印某个常量或变量,可以直接
print(index)来打印 - 如果想和其他变量一起打印,可以在括号内列出来用逗号隔开
print(index,index2,index3) - 如果想和其他字符串一起打印,可以
print("这是字符:",index)或者print("这是字符:\(index)"),就是将要打印的字符串当成参数穿进去或者将变量通过\()包裹

OC
OC中有两种方式打印printf和NSLog,printf主要打印一些C语言的类型值,OC 中主要用 NSLog.
NSLog用法如下
如果要打印某个变量值需要先知道这个变量的类, 如果是字符串则使用%@,如果是int类型则使用%d,如果是浮点数则使用%f,多个参数也是类似的用法

对比switft 和 OC 在变量打印方面,swift很方便不用指定特定占位符
注释
注释这块swift 和 oc 使用上基本一致,
- 单行注释,单行注释使用
//注释的内容 - 多行注释,多行注释使用
/* 注释的内容 */
区别是,swift 允许多行注释嵌套使用,而oc不允许
/*
这是个
/*
多行
注释
*/
看清楚了
*/
复制代码
分号
在swift 中一行的结尾写不写分号都行,但是如果两句代码在一行的时候第一句代码后面必须有分号。
在OC中每一行结尾必须有分号。
整数
swift
在swift中通常使用Int和UInt 来声明有符号和无符号整数,使用Int和UInt会自动根据当前平台来限定值范围,如果是32 位则Int = Int32
oc
在OC中通常使用NSInteger 和NSUInteger来声明有符号和无符号整数,他们也会自动根据当前平台来限定值范围。
浮点数
swift
Double : 64位浮点数,有至少15位数字的精度
Float: 32位浮点数,有6位数字精度
oc
double : 64位浮点数,有至少15位数字的精度
float : 32位浮点数,有6位数字精度
类型安全和类型推断
swift 是类型安全的语言,这是和OC的一个很大的区别。
- 类型安全:在编译时就会进行类型检查,如果类型不符则会被标记为错误。
- 类型推断:在不指定类型时swift会根据初始值进行类型推断。
数值类型转换
swift
在将不同类型放到一起进行算数运算时,类型不同的数据要进行显式的数据转换
比如:
let a = 3
let b = 1.5
let c = Double(a) + b
// c = 4.5
复制代码
这样 c就是Double类型
也可以:
let b = 1.5
let c = a + Int(b)
// c = 4
复制代码
注意点是浮点数转为整数时,数据会被截断,比如 3.9 -》 3,-3.9 -》 3
OC
oc中不同类型放到一起做算数运算时,不需要进行显式的数据转换,因为基础数据类型的接收者必须是指定类型的,所以在指定类型后数据也就有了转换的标准。
double d1 = 1.6;
int i1 = 3;
int temp = d1 + i1;
printf("%d \n",temp);
//打印结果:4
复制代码
上述代码就说明了:
1.不同类型做运算时不用显式的进行数据转换,他们会根据结果的类型来推断是否进行类型转换
2.浮点数转整数时,数据会被截断,这点和swift一样
bool 值
swift
swift 中的bool值代表true、false
OC
oc 中的bool值代表YES、NO
元组
swift
元组是一种可以存放多种不同类型数据的数组。
- 元组只能是常量,定义后无法更改,内部数值也不可更改

- 元组允许给元组内部元素定义常量或变量名称,部分不想定义的可以使用下划线代替
let temp = (11,"234")
let (index1, _) = temp
print(index1)
//打印:11
复制代码
- 元组支持使用下标访问元素
print(temp.0)
//打印:11
复制代码
- 可以在定义元组时就指定名称
let temp = (index1:11,str:"234")
//print(index1)//报错
print(temp.index1)
//打印:11
复制代码
OC
oc中没有元组的概念,不过元组有点类似于C中的结构体
可选项
swift
可选项代表这个变量可能有值可能没有
写法如下:
var temp: Int?
复制代码
其实就是在类型标注后面加个“?”
注意:可选项表示这个值要么是int,要么什么都没有,没有值时temp = nil
swift中可以在可选项变量后面增加!号来提取值,增加感叹号表示“我已确定这个可选项有值,把值拿出来吧”,如果里面没有值则会导致运行错误,所以在使用可选项之前最好使用if语句判断
OC
oc中也有类似的写法可以达到可选项的目的
在定义属性时可以加上 _Nullable,就代表该属性有可能有值有可能没有,
nil
swift
swift 中的nil 只能赋值给可选项变量,非可选项变量或常量不可以赋值为nil,nil是一种值缺失的特殊类型
oc
oc 中nil表示一个不存在对象的指针
断言
swift
1.断言只在debug下生效
2.断言中当条件为true,则继续运行,条件为false,则中止运行
var a = 3
assert(a>0,"a>0条件不满足了")
复制代码
OC 中断言的使用和这个是一致的
先决条件
swift
只有swift中有先决条件,先决条件与assert的区别就是可以用在生产环境,用法和assert一致
precondition(index > 0, "Index must be greater than zero.")
复制代码





















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)