swift基本语法05

<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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容