Swift学习之路-day01
[toc]
本人iOS开发,使用的是OC语言开发,最近利用空闲时间学习Swift,并整理一下学习进度及学习笔记
常亮与变量
在iOS中,定义一个变量要区分可变与不可变之分,而OC语言里区分可变与不可变是NS
和NSMutable
来区分,如NSString
和NSMutableString
、NSArray
和NSMutableArray
。
而在Swift中是用let
和var
区分
let 定义一个常量
var 定义一个变量
可选项
Optional
是Swift的一大特色,在OC中是没有的。它的意义是定义一个可选类值,这个值可能没有值,也可能有一个类值。
如定义一个Int类型的值,它可能为nil,也可能有值
在定义变量时,如果指定是可选的
,表示变量是一个可选类型的值,也可以是nil
定义变量时,在类型后面添加一个?
,表示变量是可选的
变量可选的默认值是nil
如
let y: Int? = 20
或者
var x:Int?
x = 10
x = 100
?
用来定义一个可选的Int类型,可能没有值,也可能有一个整数
!
强行解包 - 从可选之中强行获取对应的非空值,如果真的是nil
就会崩溃,崩溃信息如下:
奔溃信息
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
定义 可选项使用?
解包使用 !
,准备计算
let y:Int?
只是定义了一个y
没有初始化
而 let y:Int? = 20
则是初始化,给常量设置数值,初始化的工作能做一次
var x:Int?
定义了一个x
,可选默认为 nil
swift 三目运算符
??
是一个简单的三目
如果有值,则使用值
如果没有值,使用??
后面的值替代
let name: String? = "老王" //"老王"
print((name ?? "") + "你好")
print(name ?? ""+"你好”)
??
操作符号的优先级’底’
,在使用是最好加上()
包一下
guard let & if let 的技巧
if let
连用,判断对象的值是否为nil
,{}内一定有值,可以直接使用,不需要解包
常量是可选项(Optional),if let
判断后不需要解包(!),{ }内一定有值guard let
swift2.0推出,如果用if let
凭空多了一层分支,guard let
是降低分支层次的办法
guard let
使用同名的变量接收值,在后续使用的都是非空值,不需要解包
if let
同样使用户相同名的变量接收值,非空值仅在{}
内使用,
限定作用域,oc代码
中可以适当地加{}
来限定变量的作用域。{}
包装代码 ,()
是表示执行
UILabel *myLabel = ({
UILabel *l = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 120, 160)];
l.text = @"hello world";
[self.view addSubview:l];
l;
});
注意
swift语言中一行代码的结束不用“;”(分号)结束,而是直接回车结束
oc语言一个操作代码结束则需要“;”(分号)结束
oc中的强转:
(int)a
swift的强转:
Int(a)