<10>懒加载和计算属性
class ViewController: UIViewController {
//懒加载
// 1. oc里面重写get方法
// 2. swift 使用lazy关键字
// 3. 特点是在第一次使用的时候对其进行初始化, 下次直接通过变量取值
//lazyvarget - Swift Lazy computed Property Declaration
lazy var p1: Person = {
let p = Person()
p.name = "金克斯"
return p
}()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(p1.name)
print(p1.nick)
print(p1.nick1)
print(p1.nick2)
}
}
<10.1>自定义Person类
class Person: NSObject {
//1.计算属性定义: 给属性提供get和set封装对其他属性的取值和存值的操作过程叫做 -> 计算属性
//2.属性修饰符
// - fileprivate 在外界访问不了,但是可以在extension 访问, extension好比oc里面的分类
// - private 只能在当前文件使用使用, 在extension里面也不能使用
private var _name: String?
var name: String? {
get {
return _name
} set {
_name = newValue
}
}
//3.只读计算属性:
// - 给属性只提供get方法,封装其他属性的取值操作
// - 不需要开辟内存空间,返回的是其他属性的内存地址
var nick: String? {
get {
return "我叫\(name ?? "")"
}
}
//只读计算属性的简写方式
var nick1: String? {
return "我叫\(name ?? "")too"
}
//4.懒加载
lazy var nick2: String? = {
// 在闭包里面如果不做为函数的参数使用的话,默认是逃逸的状态 -> 需要self指定属性的所属者
return "我叫\(self.name ?? "")"
}()
// 5. 懒加载 与 只读计算属性对比
/*
懒加载
-> 需要开辟内存空间
-> 只需要在第一次使用的时候初始化一次
-> 耗费内存
计算属性
-> 不需要开辟内存空间,返回的是其它内存地址
-> 每次调用都需要执行get方法
-> 耗费cpu
*/
}
<11>网络访问
func loadData() {
//定义url接口
let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")
let urlRequest = URLRequest(url: url!)
//数据请求
URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in
if error != nil {
print(error)
return
}
//代码执行到此表示请求数据成功
if data != nil {
//[]表示默认的枚举值
// 尝试反序列化是否成功,如果失败返回nil
let dic = try? JSONSerialization.jsonObject(with: data!, options: [])
print(dic)
}
}.resume()