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

By | 04月09日
Advertisement

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              }

Similar Posts:

  • Swift 基本知识点之十 —willSet与didSet的用法

    属性观察器 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新值和当前值相同的时候也不例外. 可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重写属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器.属性重写请参考重写. 注意 不需要为非重写的计算属性添加属性观察器,因为可以通过它的 setter 直接监控和响应值的变化. 可以为属性添加如下的一个或全部观察器: willSet在新的值被设置之前调用 didSet在新的值被设置之后立即调

  • swift语言的学习笔记十一(willSet与didSet)

    在Swift语言中用了willSet和didSet这两个特性来监视属性的除初始化之外的属性值变化 无需说太多,看看下面的代码你就能很快明白的 复制代码 import Foundation class People : NSObject { //普通属性 var firstName:String = "" var lastName:String = "" var nickName:String = "" //计算属性 var fullName:St

  • 在Swift中应用Grand Central Dispatch(下)

    本文由loveltyoic(博客)翻译自raywenderlich,原文:Grand Central Dispatch Tutorial for Swift: Part 1/2 欢迎来到本GCD教程的第二同时也是最终部分! 在第一部分中,你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让PhotoManager单例在读写照片时是线程安全的.除此之外,你用到dispatch_after来提示用户,优化了用户体验.还有,使用di

  • Swift中三大特性&amp;自动引用计数

    三大特性 继承 如果我们要定义一个class表示一个人 它有两个属性表示name和age: class Person { let name: String let age: Int init(name: String, age: Int) { self.name = name self.age = age } } 接下来,如果我们还需要一个类表示一个学生呢? 最想当然的做法当然是如法炮制一个类似的class class Student { var name : String var age :

  • 在 Swift 中实现单例方法

    我们通常在进行开发的时候,会用到一个叫做 单例模式 的东西.相信大家也都对这种模式非常熟悉了.而且单例的使用在平时的开发中也非常频繁. 比如我们常用到的 NSUserDefaults.standardUserDefaults(). 在 Swift 中我们如何实现单例模式呢?如果你曾经对 Objective-C 比较熟悉的话,你可能首先会想到这样写: class DBManager { class var instance: DBManager? class func sharedInstance

  • Swift 中使用 SwiftyJSON 制作一个比特币价格 APP

    Swift 中处理 JSON 数据有很多种方式,可以使用原生的 NSJSONSerialization,也可以使用很多第三方库.原生的 NSJSONSerialization 方式这篇文章中介绍过.这次我们介绍一个第三方库 SwiftyJSON 并且用它来制作一个有趣的 APP. 关于 SwiftyJSON 首先,我们来了解一下什么是 SwiftyJSON, 并且我们为什么要用这个库.比如我们要解析这个比特币实时价格的接口: http://api.coindesk.com/v1/bpi/curr

  • swift中文文档- 类型转换

    未翻译完 待续(英语烂,求斧正) Type Casting 类型转换 Type casting is a way to check the type of an instance, and/or to treat that instance as if it is a different superclass or subclass from somewhere else in its own class hierarchy. 类型转换是检测实例所属类型的一种方法,和/或 去对待实例好像它是一个

  • Swift 中 ViewController 默认构造方法不关联同名的xib文件

    在使用objective c的时候,调用ViewController的默认构造函数,会自动关联到一个与ViewController名字相同的xib文件上,这样无疑方便了开发者,减少了代码量.但不知道为什么,在swift中,新建ViewController实例,不在默认关联xib,一定要开发者指定xib的名字,这对于有代码洁癖的人是不可接受的,因为通常情况下,xib的名字一定是和ViewController的名字相同的.本文讲介绍一种方案去解决这个问题. Objective C中的写法 TwoVi

  • 泛型第二课,派生子类、属性类型、方法重写、泛型擦除

    子类(实现类) 子类与父类|接口一样使用泛型 子类指定具体的类型 子类与父类|接口 同时擦除类型 子类泛型,父类|接口 擦除 错误:不能子类擦除,父类|接口泛型 package com.pkushutong.genericity3; /** * 父类为泛型类 * 1.属性 * 2.方法 * * 要么同时擦除,要么子类大于等于父类的类型 * 不能子类擦除,父类泛型 * 1.属性类型 * 父类中,随父类型定 * 子类中,随子类型定 * * 2.方法重写: * 全部随父类而定 * @author de

  • 在Swift中自定义下标(Subscripts)

    通常情况下,我们在使用数组(Array)或字典(Dictionary)时会使用到下标.其实在Swift中,我们还可以给类(class)自定义下标,下面就让我们来看看Swift中是如何自定义下标的. 通过Subscript赋值和获取值 我们先看看下面这个类: class DailyMeal { enum MealTime { case Breakfast case Lunch case Dinner } var meals: [MealTime : String] = [:] } 我们使用该类时可

Tags: