05-04、メソッドとしてのオブジェクトのパラメータの連続伝達

2202 ワード

注意:以前のプロジェクトの古い方法は簡単に修正したり削除したりするのではなく、新しい方法を書き直して代わりました.//射撃//企業レベルの開発では決して勝手に一つの方法を修正しないでください(古い方法)
  • (void)shoot;

  • //撃つには弾倉を渡さなければならない(新しい方法)
  • (void)shoot:(Clip *)c;

  • スクリーンショット2017-09-15 14.12.47.png
    #import 
    /*
    
       
         :   (Soldier)
       :  (name),   (height),   (weight)
       :  (fire),    (callPhone)
    
      
         : (Gun)
       :  (clip) ,   (model)
       :   (addClip)
    
       
         :   (Clip)
       :  (Bullet)
       :   (addBullet)
    
     */
    
    #pragma mark -   
    @interface Clip : NSObject
    {
    @public
    int _bullet; //   
    }
    
    //       
    - (void)addBullet;
    
    @end
    
    @implementation Clip
    
    - (void)addBullet
    {
    //    
    _bullet = 10;
    }
    
    @end
    
    #pragma mark -  
    @interface Gun : NSObject
    {
    //@public
    //    int _bullet; //   
    Clip *clip; //   
    }
    
    //   
    //   :                    
    - (void)shoot;
    
    //             
    - (void)shoot:(Clip *)c;
    
    @end
    
    @implementation Gun
    /*
    - (void)shoot
    {
    //        
    if (_bullet > 0) {
        
        _bullet--;
        NSLog(@"     %i", _bullet);
    }else
    {
        NSLog(@"     ,     ");
    }
    }
     */
    
    /**
    *    
    *
    *  @param c   
    */
    - (void)shoot:(Clip *)c
    {
    //        
    if (c != nil) { // nil == null ==    
        //        
        if (c->_bullet > 0) {
            c->_bullet -= 1;
            NSLog(@"     %i", c->_bullet);
        }else
        {
            NSLog(@"     ");
        }
    }else
    {
        NSLog(@"    ,     ");
    }
    }
    @end
    
    #pragma mark -   
    @interface Soldier : NSObject
    {
    @public
    NSString *_name;
    double _height;
    double _weight;
    }
    //   
    - (void)fire:(Gun *)gun;
    
    //   ,            
    - (void)fire:(Gun *)gun clip:(Clip *)clip;
    @end
    
    @implementation Soldier
    
    - (void)fire:(Gun *)g
    {
    [g shoot];
    }
    
    - (void)fire:(Gun *)gun clip:(Clip *)clip
    {
    //          
    if (gun !=nil &&
        clip != nil) {
        
        [gun shoot:clip];
    }
    }
    
    @end
    
    #pragma mark -     
    int main(int argc, const char * argv[]) {
    
    // 1.    
    Soldier *sp =[Soldier new];
    sp->_name = @"   ";
    sp->_height = 1.88;
    sp->_weight = 100.0;
    
    // 2.     
    Gun *gp = [Gun new];
    //    gp->_bullet = 10;
    
    // 3.    
    Clip *clip = [Clip new];
    [clip addBullet];
    
    // 2.     
    //             
    //    [sp fire:gp]; //   
    [sp fire:gp clip:clip];
    
    return 0;
      }