2015-03-06 23:03:06 wenzfcsdn 阅读数 2907
  • java语言从入门到精通2016+项目实训

    掌握jdk的安装与配置,面向对象编程的基本思想;掌握条件语句,循环语句,数组,类的定义,继承与多态,接口,抽象类,内部类,异常处理,重载与重写;awt,swing图形界面编程,数据库编程,网络通信编程,IO输入输出与文件操作,多线程编程,反射机制,通过大量的课后上机练习题讲解,内部测试试题的详细解析,深入浅出的讲解,再通过开发推箱子游戏,仿QQ即时通讯软件的项目实训,能达到精通JAVA语言的目的

    36069 人正在学习 去看看 赖国荣

Swift中的willSet与didSet(重写属性的Set方法)

var rating: CGFloat? {
        willSet {
            println("将要设置新值\(newValue)")
        } didSet {
            println("rating filed changed form \(oldValue) to \(rating)")
            println("rating old(\(oldValue)) new(\(rating)))")
            //告诉系统将要布局
            self.setNeedsLayout()
            /*
            if rating < 10
            {
                nickName = "Little"
            }else
            {
                nickName = "Big"
            }
            */
            /*
            let rect = CGRectMake(foregroundImageView.frame.origin.x, foregroundImageView.frame.origin.y, backgroundImageView.frame.size.width * (rating!/10), foregroundImageView.frame.size.height)
            foregroundImageView.frame = rect
            */
        }
        
    }



在layoutSubViews()填充数据和布局视图(注意:方法是否会被多次调用)

override func layoutSubviews() {
        super.layoutSubviews()
        //填充数据(布局视图)
        let rect = CGRectMake(foregroundImageView.frame.origin.x, foregroundImageView.frame.origin.y, backgroundImageView.frame.width * (rating! / 10), foregroundImageView.frame.height)
        foregroundImageView.frame = rect
        
    }







2017-02-09 20:43:02 viiimaus 阅读数 4957
  • java语言从入门到精通2016+项目实训

    掌握jdk的安装与配置,面向对象编程的基本思想;掌握条件语句,循环语句,数组,类的定义,继承与多态,接口,抽象类,内部类,异常处理,重载与重写;awt,swing图形界面编程,数据库编程,网络通信编程,IO输入输出与文件操作,多线程编程,反射机制,通过大量的课后上机练习题讲解,内部测试试题的详细解析,深入浅出的讲解,再通过开发推箱子游戏,仿QQ即时通讯软件的项目实训,能达到精通JAVA语言的目的

    36069 人正在学习 去看看 赖国荣
//
//  DemoLabel.swift


import UIKit

class DemoLabel: UILabel {
    //模型 -> 给视图设置模型,由视图自己根据模型的数据,决定显示的内容
    var person: Person? {
        //替代OC中重写setter方法,didSet没有代码提示
        //区别:不用考虑 _成员变量 = 值!
        //OC中如果是copy属性,应该 _成员变量 = 值 copy
        didSet {
            //此时name属性已经有值,可以直接使用设置UI内容
            text = person?.name;
        }
    }

}

2016-01-29 09:19:28 BaiHuaXiu123 阅读数 8034
  • java语言从入门到精通2016+项目实训

    掌握jdk的安装与配置,面向对象编程的基本思想;掌握条件语句,循环语句,数组,类的定义,继承与多态,接口,抽象类,内部类,异常处理,重载与重写;awt,swing图形界面编程,数据库编程,网络通信编程,IO输入输出与文件操作,多线程编程,反射机制,通过大量的课后上机练习题讲解,内部测试试题的详细解析,深入浅出的讲解,再通过开发推箱子游戏,仿QQ即时通讯软件的项目实训,能达到精通JAVA语言的目的

    36069 人正在学习 去看看 赖国荣

属性观察器
属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新值和当前值相同的时候也不例外。

可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重写属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。属性重写请参考重写。

注意
不需要为非重写的计算属性添加属性观察器,因为可以通过它的 setter 直接监控和响应值的变化。
可以为属性添加如下的一个或全部观察器:

willSet在新的值被设置之前调用
didSet在新的值被设置之后立即调用
willSet观察器会将新的属性值作为常量参数传入,在willSet的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称newValue表示。

类似地,didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue。

注意
父类的属性在子类的构造器中被赋值时,它在父类中的willSet和didSet观察器会被调用。
有关构造器代理的更多信息,请参考值类型的构造器代理和类的构造器代理规则。
这里是一个willSet和didSet的实际例子,其中定义了一个名为StepCounter的类,用来统计一个人步行时的总步数。例子如下:

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
        {
            print("Will set an new value \(newValue) to age")
        }
        //我们需要在age属性发生变化后,更新一下nickName这个属性
        didSet
        {
            print("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

这里写图片描述

2017-07-31 18:39:29 ewfrggregtrwt 阅读数 7279
  • java语言从入门到精通2016+项目实训

    掌握jdk的安装与配置,面向对象编程的基本思想;掌握条件语句,循环语句,数组,类的定义,继承与多态,接口,抽象类,内部类,异常处理,重载与重写;awt,swing图形界面编程,数据库编程,网络通信编程,IO输入输出与文件操作,多线程编程,反射机制,通过大量的课后上机练习题讲解,内部测试试题的详细解析,深入浅出的讲解,再通过开发推箱子游戏,仿QQ即时通讯软件的项目实训,能达到精通JAVA语言的目的

    36069 人正在学习 去看看 赖国荣


在OC中我们经常重写属性的get和set方法来刷新UI之类的事,那在swift中,怎么实现get和set方法呢。

        代码如下:


这里另外初始化一个_text的变量,存储新值,防止get方法死循环。在set方法里有个newValue的变量,即是将要赋予的新值。


另外在swift中有一套新方法,willSet和didSet,具体代码如下:


其中willSet是值将要改变时触发,存在一个newValue的变量。didSet是值已经改变触发,存在一个oldValue的变量。 


  willSet、didSet 和  get、set这两套方法只能二选一,全部实现会报错。所以当想要在get方法里要干事时,好像就只能用get set方法。而且set方法和willset好像是一样的,都有newValue变量。










2018-09-03 14:25:35 LeeCSDN77 阅读数 60
  • java语言从入门到精通2016+项目实训

    掌握jdk的安装与配置,面向对象编程的基本思想;掌握条件语句,循环语句,数组,类的定义,继承与多态,接口,抽象类,内部类,异常处理,重载与重写;awt,swing图形界面编程,数据库编程,网络通信编程,IO输入输出与文件操作,多线程编程,反射机制,通过大量的课后上机练习题讲解,内部测试试题的详细解析,深入浅出的讲解,再通过开发推箱子游戏,仿QQ即时通讯软件的项目实训,能达到精通JAVA语言的目的

    36069 人正在学习 去看看 赖国荣

//存储属性可以添加属性观察器, 除了 lazy stored property

//不需要为无法重载的计算属性添加属性观察器,因为可以通过 setter 直接监控和响应值的变化。

//每次属性被设置值的时候都会调用,即使新的值和现在的值相同

//可以通过重写属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器。

        

//注意:

//willSet和didSet观察器在属性初始化过程中不会被调用,它们只会当属性的值在初始化之外的地方被设置时被调用。

//可以为属性添加如下的一个或两个观察器:

//willSet在设置新的值之前调用

//didSet在新的值被设置之后立即调用

//willSet观察器会将新的属性值作为固定参数传入,在willSet的实现代码中可以为这个参数指定一个名称,如果不指定则参数仍然可用,这时使用默认名称newValue表示。

 //类似地,didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue。

 

错误使用: tableView reload

var data:[String] = [] {
        willSet {//不能用willSet, willSet 在赋值之前调用
            self.tableView.reloadData()
        }
    }

因为 willSet 在设置之前调用, 所有在给 tableView 的 DataSource 设置属性观察器 reloadtableView 时, 不能写在 willSet 中, 此时 DataSource 还没有被赋值

Swift父类重写

阅读数 157

没有更多推荐了,返回首页