swift 属性观察器

简单例子:

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)
        }
    }
    

观察模式很好用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 属性观察器可让我们在使用属性时候,在希望一个属性发生改变时候进行某些操作。也就是一些小的代码块,可在一个属性值即可...
    小黑Swift阅读 3,673评论 1 0
  • OC里面可以重写属性的get和set方法,swift里没有对应的写法,但有属性观察器属性观察器会监控和响应属性值变...
    Maggie的小蜗居阅读 689评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,729评论 25 708
  • title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [APPVENTUR...
    guoshengboy阅读 2,696评论 0 2
  • 01 昨天和朋友聊天,说到寒假回家最怕的是什么事。他说,怕收红包。 我惊讶:“竟然不是催你考研、催你找女朋友、叫你...
    海西情歌阅读 315评论 1 2

友情链接更多精彩内容