菜鸟向前看。。。。。。
来八一八swift的那些事了
啦啦啦啦啦啦啦,快来打我呀,我就是这么强大,啦啦啦啦啦啦啦啦啦啦啦
目录
1、swift中let和var的区别
2、swift中的lazy
3、Swift中的注释
1、swift中let和var的区别
let和var的区别在于对象的内存地址可不可以改变
let代表不可变对象,即对象首地址不能发生改变,也就是说内存地址不能改变;
var代表可变对象,即内存地址可以发生改变,可以修饰指针重新指向的变量;
举例:
let strB:String = "我是B"
strB = "我是新来的B" 这个时候Xcode会提示报错
Expected 'var' keyword in property declaration
Insert 'var '
Invalid redeclaration of 'strB'
因为let修饰的变量不能改变指针指向,故这时候Xcode提示你用var
var strB:String = "我是B"
strB = "我是新来的B" 完美展示不会报错
再来看看下面这个
let arrayM: NSMutableArray = NSMutableArray()
arrayM.add("我是A") Xcode为什么没有报错???
let可以修饰可变对象,数组arrayM的内存地址并没有发生改变,也就是数组arrayM的指针没有重新指向
2、swift中的lazy
swift中我们在变量属性前加lazy关键字来指定延迟加载,最主要的作用就是提升性能
所谓延迟加载就是在第一次访问某个属性时,要判断这个属性是否初始化,如果已经初始化则直接返回,如果没有初始化则进行初始化。这样可以把这个属性延迟初始化,把它和包含它的对象初始化分隔开,从而达到提升性能的目的。
延迟加载是初始化时很常用的性能优化方式,尤其是在一些对象的属性比较复杂时候,默认全部初始化会耗费不少时间,从而影响性能;还有一些在特定场景才能使用到的对象,更是浪费资源。所以有些时候我们并不会立刻用到一个对象或者一个对象的所有属性,使用延迟加载可以提升性能。示例代码如下:
private lazy var _titleLabel: UILabel = {
let titleL = UILabel.init()
titleL.text = "Hello World"
return titleL
}()
关于Lazy的拓展:Lazy可以配合map、filter这类接受闭包运行的方法一起,使整个行为变成延迟执行,举个例子吧
正常情况下:
let numbers = 1...5
let doubleNumbers = numbers.map { (i:Int) -> Int in
print("numbers:\(i)")
return i*2
}
for i in doubleNumbers{
print("doubleNumbers:\(i)")
}
输出结果:
numbers:1
numbers:2
numbers:3
numbers:4
numbers:5
doubleNumbers:2
doubleNumbers:4
doubleNumbers:6
doubleNumbers:8
doubleNumbers:10
添加Lazy关键字:
let numbers = 1...5
let doubleNumbers = numbers.lazy.map { (i:Int) -> Int in
print("numbers:\(i)")
return i*2
}
for i in doubleNumbers{
print("doubleNumbers:\(i)")
}
输出结果:
numbers:1
doubleNumbers:2
numbers:2
doubleNumbers:4
numbers:3
doubleNumbers:6
numbers:4
doubleNumbers:8
numbers:5
doubleNumbers:10
对于一些不需要完全运行或者提前退出的情况,使用lazy进行性能优化更加有效
3、Swift中的注释
分组注释
OC中
#pragma mark====== 你要写的注释
Swift中
//MARK: -你要写的注释