对比OC学习Swift-1-基础内容

常量与变量

声明常量与变量

swift

常量声明用let, 变量声明用var

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

image.png

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

image.png

OC

常量声明用 const, 变量声明用 id

const

const 使用注意点:
const 修饰的是其右边的值,也就是const 右边的这个整体的值不能变。

比如:
使用用法:const NSString *str = @"111";
则*str不能变,str可以变,这时可以使用str = @"222",给str更改值。

image.png

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

image.png

id

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

image.png

类型标注

swift

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

image.png

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)"),就是将要打印的字符串当成参数穿进去或者将变量通过\()包裹

image.png

OC

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

image.png

对比switft 和 OC 在变量打印方面,swift很方便不用指定特定占位符

注释

注释这块swift 和 oc 使用上基本一致,

  • 单行注释,单行注释使用//注释的内容
  • 多行注释,多行注释使用/* 注释的内容 */

区别是,swift 允许多行注释嵌套使用,而oc不允许

/* 
这是个
    /*
    多行
    注释
    */
看清楚了
*/
复制代码

分号

在swift 中一行的结尾写不写分号都行,但是如果两句代码在一行的时候第一句代码后面必须有分号。

在OC中每一行结尾必须有分号。

整数

swift

在swift中通常使用IntUInt 来声明有符号和无符号整数,使用IntUInt会自动根据当前平台来限定值范围,如果是32 位则Int = Int32

oc

在OC中通常使用NSIntegerNSUInteger来声明有符号和无符号整数,他们也会自动根据当前平台来限定值范围。

浮点数

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

元组是一种可以存放多种不同类型数据的数组。

  1. 元组只能是常量,定义后无法更改,内部数值也不可更改

image.png

  1. 元组允许给元组内部元素定义常量或变量名称,部分不想定义的可以使用下划线代替
let temp = (11,"234")
let (index1, _) = temp
print(index1)
//打印:11
复制代码
  1. 元组支持使用下标访问元素
print(temp.0)
//打印:11
复制代码
  1. 可以在定义元组时就指定名称
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 只能赋值给可选项变量,非可选项变量或常量不可以赋值为nilnil是一种值缺失的特殊类型

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.")
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享