Swift中的懒加载会在第一个访问的时候执行
懒加载其实就是一个提前准备好的的闭包
注意:懒加载一定要用var
class ViewController: UIViewController {
// 开发常用格式
lazy var dataList: [String] = {
print("我懒加载了")
return ["猪哥哥", "曾阿牛", "朱丽叶"]
}()
let demoFunc = {
() -> [String]
in
print("我懒加载了")
return ["猪哥哥", "曾阿牛", "朱丽叶"]
}
lazy var dataList2: [String] = self.demoFunc()
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print(dataList)
print(dataList)
print(demoFunc())
print(dataList2)
print(dataList2)
}
}
set方法和get方法
class Person: NSObject {
// 一般开发不建议酱紫写法
var _name:String?
var name: String?{
get{
return _name
}
set{
// 主要外界通过对象.name给name赋值,这个值就会保存于 newValue里面
_name = newValue
}
}
// 一般是酱紫写法
var gender:String?{
// 用didSet代替set,在设置完值以后调用
didSet{
print(gender)
}
}
// 如果仅仅重写get方法,这个属性成为 计算型 属性
// 对应OC中的只读属性
// 注意点:计算型属性是不占用内存空间的
var age:Int{
get{
return 24
}
}
}
外边的调用
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let p = Person()
p.name = "zgg"
print(p.name!)
p.gender = "man"
print(p.gender!)
// 这句报错:原因是只读属性
// Cannot assign to property: 'age' is a get-only property
p.age = 100
print(p.age) // 24
}
}
willSet 和 didSet
以下是周银辉的开发博客中对Swift中的willSet与didSet的表述,直观不啰嗦,直接上代码
租用:在Swift语言中用了willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化
import Foundation
class People : NSObject
{
//普通属性
var firstName:String = ""
var lastName:String = ""
var nickName:String = ""
//计算属性
var fullName:String
{
get
{
return nickName + " " + firstName + " " + lastName
}
}
//带属性监视器的普通属性
var age:Int = 0
{
//我们需要在age属性变化前做点什么
willSet
{
println("Will set an new value \(newValue) to age")
}
//我们需要在age属性发生变化后,更新一下nickName这个属性
didSet
{
println("age filed changed form \(oldValue) to \(age)")
if age<10
{
nickName = "Little"
}else
{
nickName = "Big"
}
}
}
func toString() -> String
{
return "Full Name: \(fullName) " + ", Age: \(age) "
}
}
var me = People()
me.firstName = "Zhang"
me.lastName = "San"
me.age = 20
println(me.toString())
/*程序输出
Will set an new value 20 to age
age filed changed form 0 to 20
Full Name: Big Zhang San , Age: 20
*/