美文网首页
懒加载 、set方法和get方法

懒加载 、set方法和get方法

作者: 叶子扬 | 来源:发表于2018-01-10 21:05 被阅读0次

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
*/

相关文章

  • 懒加载 、set方法和get方法

    Swift中的懒加载会在第一个访问的时候执行懒加载其实就是一个提前准备好的的闭包注意:懒加载一定要用var set...

  • Swift 4.0 属性(Properties)

    apple官方文档 懒加载 set 和get方法:set方法会有一个默认的newValue值 只读属性 观察者属性...

  • Swift 项目基本写法收集

    泛型用法 GCD相关 懒加载 lazyloading get set 方法 私有方法,私有属性,变量之类的得用fi...

  • IOS - 同时重写Get/Set方法

    .h文件写无property属性,get方法,set方法 .m文件重写set和get方法 完结

  • Swift中的计算机属性setter/ getter

    1. 仿照OC 来写set/get方法 2. 只读属性的写法 3. 存储型属性和计算型属性 4.计算型属性和懒加载...

  • oc 基础 set 方法和 get 方法

    属性声明和set 方法 get方法声明 set 方法和get方法实现 更改工程处理mrc环境下 在mrc的环境下我...

  • iOS 懒加载

    懒加载:即延时加载,用时再加载,通过重写get方法实现。 注意:(1)重写get方法时,先判断当前对象是否为空,为...

  • iOS开发,懒加载

    什么是懒加载? 懒加载--比较懒的加载方式,需要的时候才加载,也称为延时加载。 所谓懒加载既是重写get方法,一定...

  • 04-面向对象语法03

    一、set方法和get方法 1.set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用se...

  • self.和下划线的区别

    self.var 通过访问方法的引用(包括set和get方法)_var 直接引用(不通过set和get方法) @...

网友评论

      本文标题:懒加载 、set方法和get方法

      本文链接:https://www.haomeiwen.com/subject/znlanxtx.html