代码优化 为状态类写个函数

例如,某游戏有赢,输,平手,每个状态有不同背景,有不同文字提醒。如果集中在一个函数中处理,那么就要添加很多if语句,代码臃肿,且难以阅读。

下面是优化前的代码:

  func compareSign(mySign:Sign) {
        let computerSign:Sign = randomSign()!
        let gameState = mySign.caculating(comupterSign: computerSign)
        switch gameState { // 判读三种状态,然后更新不同UI ,臃肿代码#0
        case .win:
            updateWinUI(computerSign: computerSign, mySign: mySign)
            break;
        case .lose:
            updateLoseUI(computerSign: computerSign, mySign: mySign)
            break;
        case .draw:
            updateDrawUI(computerSign: computerSign, mySign: mySign)
            break;
        default:
            break;
        }
    }
    
    
    func updateLoseUI(computerSign:Sign ,mySign:Sign) {
        //相同代码 #1
        self.computerTurnLabel.text = computerSign.getSignPic();
        //获取失败时的文字提醒, 类似代码 #2
        self.stateLabel.text = GameState.lose.getStateString()
        //相同代码,
        switch  mySign{
        case .rock:
            self.cissorButton.isHidden = true
            self.paperButton.isHidden = true
            break
        case .paper:
            self.rockButton.isHidden = true
            self.cissorButton.isHidden = true;
            break
        case .scissors:
            self.rockButton.isHidden = true
            self.paperButton.isHidden = true;
            break
        }
        //相同代码 #3
        self.playAgainButton.isHidden = false;
        self.view.backgroundColor = gameState.getStateBackgroundColor();//类似代码 #4
    }
    
    func updateWinUI(computerSign:Sign ,mySign:Sign)  {
        self.computerTurnLabel.text = computerSign.getSignPic();  //#1
        
        self.stateLabel.text = GameState.win.getStateString() #2
        
        switch  mySign{
        case .rock:
            self.cissorButton.isHidden = true
            self.paperButton.isHidden = true
            break
        case .paper:
            self.rockButton.isHidden = true
            self.cissorButton.isHidden = true;
            break
        case .scissors:
            self.rockButton.isHidden = true
            self.paperButton.isHidden = true;
            break
        }
        
        self.playAgainButton.isHidden = false;#3
        self.view.backgroundColor = UIColor.orange;#4
    }
    
    
    func updateDrawUI(computerSign:Sign ,mySign:Sign,gameState:GameState)  {
        self.computerTurnLabel.text = computerSign.getSignPic(); //#1
        
        self.stateLabel.text = GameState.draw.getStateString()//#2
        
        switch  mySign{
        case .rock:
            self.cissorButton.isHidden = true
            self.paperButton.isHidden = true
            break
        case .paper:
            self.rockButton.isHidden = true
            self.cissorButton.isHidden = true;
            break
        case .scissors:
            self.rockButton.isHidden = true
            self.paperButton.isHidden = true;
            break
        }
        
        self.playAgainButton.isHidden = false; #3
        self.view.backgroundColor = UIColor.orange; #4
    }

如果把#2 #4的右边参数,写一个实例方法,那么优化后的代码是这样的:

func compareSign(mySign:Sign) {
        let computerSign:Sign = randomSign()!
        let gameState = mySign.caculating(comupterSign: computerSign)
        updateUI(computerSign: computerSign, mySign: mySign, gameState: gameState)
    }
    
    func gameStartUI() {
        self.computerTurnLabel.text = "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值