美文网首页
swift 属性观察器

swift 属性观察器

作者: 晓蜻蜓 | 来源:发表于2016-08-20 18:05 被阅读0次

简单例子:

class TestClass{
var totalNumber:Int = 0{
      willSet{
          print(newValue)//newValue(自带属性)是新传进来的值,这时totalNumber还没有变成刚传进来的值
        }
      didSet {
         print(oldValue)//oldValue(自带属性),这时totalNumber已经改变,变为传进来的值
     }

}

为了保存右边中间那个价格数自己还想了很久怎么写程序,因为那个文本是一个字符串,它夹带有一个币种符号,刚开始我是这样保存的,后来发现每次刷新就要截取出symbol这个不是数字的字符,好麻烦

self.oldCurrentPrice = self.labelCurrentPrice.text!
self.labelCurrentPrice.text = "\(symbol)\(curentPrice)"

后来上司教我使用属性观察设计模式来对currentPrice 进行观察的值

var currentPrice: Double = 0 {               //当前价格
        willSet {
            var marketPriceTrend: MarketPriceTrend
            let newPrice = newValue
            let trend = newPrice - currentPrice
            self.trendImage.hidden = false
            if trend > 0 {
                //走势向上
                marketPriceTrend = MarketPriceTrend.Up
            } else if trend < 0 {
                //走势向下
                marketPriceTrend = MarketPriceTrend.Down
            } else {
                //相等
                self.trendImage.hidden = true
                marketPriceTrend = MarketPriceTrend.Equal
            }
            
            let currentCurrencyType = self.selectedExchangeType.currencyType
            let currencyData = CurrencyData.getCurrencyData(currentCurrencyType)!
            let symbol = currencyData.symbol
            self.labelCurrentPrice.text = "\(symbol)\(newValue.toString())"
          //加载图片升降,这里用的是枚举返回UIImage
            self.trendImage.image = marketPriceTrend.imageTrend
          //  设置字体颜色,也是用枚举
            self.labelCurrentPrice.textColor = marketPriceTrend.trendColor
        }

marketPriceTrend枚举:

/// 市场价格趋势
enum MarketPriceTrend {
    case Up, Down, Equal
    
    var imageTrend: UIImage {
        switch self {
        case Up:
            return UIImage(named: "btn_market_BZSZ_arrow2")!
        case Down:
            return UIImage(named: "btn_market_BZSZ_arrow1")!
        case Equal:
            return UIImage(named: "btn_market_BZSZ_arrow2")!
        }
    }
    
    var trendColor: UIColor {
        switch self {
        case Up:
            return UIColor(hex: 0xFC461E)
        case Down:
            return UIColor(hex: 0x149073)
        case Equal:
            return UIColor(hex: 0xFC461E)
        }
    }
    

观察模式很好用

相关文章

  • swift属性观察器

    OC里面可以重写属性的get和set方法,swift里没有对应的写法,但有属性观察器属性观察器会监控和响应属性值变...

  • swift 属性观察器

    概念 用来监视属性值变化,当属性值发生改变时可以对此作出响应。可以为除了延迟存储属性之外的其他存储属性添加属性观察...

  • swift 属性观察器

    简单例子: 为了保存右边中间那个价格数自己还想了很久怎么写程序,因为那个文本是一个字符串,它夹带有一个币种符号,刚...

  • swift 属性观察器

  • swift 属性专题

    计算属性 简写设置器 在swift中setter/getter方法的实现 属性观察者 属性包装 属性包装映射值

  • Swift属性观察方法willSet和didSet

    Swift-属性观察着(willSet和didSet) 属性观察者,类似于触发器.用来监视属性的除了初始化之外的属...

  • 浅谈swift中的属性观察者

    Swift-属性观察者(willSet和didSet) 属性观察者,类似于触发器.用来监视属性的除了初始化之外的属...

  • Swift 继承属性观察器

    关于 didSet 和 willSet 这两个方法, 在继承的时候, 父类的也会执行, 所以尽量不要像下面那样来实...

  • Swift-计算属性、属性观察器

    计算属性 计算属性不直接存储值,而是提供一个 getter 和一个可选的 setter,来间接获取和设置其他属性或...

  • Swift3.0-属性、属性观察器

    属性 属性将值跟特定的类、结构或枚举关联。 存储属性 简单来说,一个存储属性就是存储在特定类或结构体实例里的一个常...

网友评论

      本文标题:swift 属性观察器

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