文档章节

第02天OC语言(08):对象作为方法的参数连续传递上

lyh2017iOS
 lyh2017iOS
发布于 2017/07/12 00:10
字数 392
阅读 1
收藏 0

#####一、概念

// 注意 : 在企业开发中 千万不要随意修改一个方法

#####二、代码

#import <Foundation/Foundation.h>
#pragma mark 类
/*
 弹夹
 事物名称 : 弹夹(Clip)
 属性 : 子弹(Bullet)
 行为 : 上子弹(addBullet)
 */
#pragma mark - 3.弹夹

@interface Clip : NSObject
{
    @public
    int _bullet;
}
- (void)addBullet;
@end

@implementation Clip
- (void)addBullet
{
    // 上子弹
    _bullet = 10;
}
@end

#pragma mark - 2.枪
@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(@"没有子弹了,请换弹夹");
//    }
//    
//}
- (void)shoot:(Clip *)c
{

    if (c != nil) { // nul == null == 没有值
        
        // 判断有没有子弹
        if (c->_bullet > 0) {
            
            c->_bullet -=1;
            NSLog(@"打了一枪 %i",c->_bullet);
        }
        else
        {
            NSLog(@"没有子弹了");
        }
    
    }
    else
    {
        NSLog(@"没有弹夹 ,请换弹夹");
    }
}
@end
#pragma mark - 1.士兵
@interface Soldier : NSObject
{
@public
    NSString *_name;
    double _height;
    double _weight;
}
- (void)fire:(Gun *)gun;
// 开火,给士兵 一把枪,和弹夹
- (void)fire:(Gun *)g Clip:(Clip *)clip;
@end

@implementation Soldier

- (void)fire:(Gun *)g
{
    [g shoot];
}

- (void)fire:(Gun *)g Clip:(Clip *)clip
{
    // 判断是否 有枪 和子弹
    if (g != nil &&
        clip != nil) // 这里我觉得不用判断 clip是不是为空,因为我在shoot里面已经判断了,如果没有的话 就提示更换弹夹
    {
        [g shoot:clip];
    }
}
@end

#pragma mark - main函数
int main(int argc, const char * argv[])
{
    Soldier *s = [Soldier new];
    s->_name = @"lyh";
    s->_height = 1.71;
    s->_weight = 65.0;
    
    Gun *gp = [Gun new];
//    gp->_bullet = 10;
    
    // 3.创建弹夹
    Clip *clip = [Clip new];
    [clip addBullet];
    
//    [s fire:gp];
    
    [s fire:gp Clip:clip];
    
    return 0;
}

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
面向对象1-类

NSString类概述 NS前缀:在OC中没有命名空间的概念,在OC中为了把不同项目中的类区别开来,使用前缀;Foundation 与 Application Kit 中使用NS前缀 NSString 是OC用于表示字符串的一个类 NS...

5vinsEnt
2016/03/31
13
0
OC语言的特性(一)-消息传递与调用函数的表现形式

我们在初学Objective-C时,都会觉得ObjC中的消息传递和其他语言的调用函数差不多,只是在OC中,方法调用用消息传递这一概念来代替。 那么到底怎样区别OC中的消息传递与其他语言的调用函数呢。...

浩浩老师
2015/09/08
1K
0
Lua与ObjC的交互

写在前面 很多时候我们都需要借助一些脚本语言来为我们实现一些动态的配置,那么就会涉及到如何让脚本语言跟原生语言交互的问题。平时在网上看得比较多的是使用JS(JavaScript)与iOS原生代码...

vimfung
2016/12/29
2.1K
7
Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下
2017/12/06
0
0
iOS 编写高质量Objective-C代码(二)

《编写高质量OC代码》已经顺利完成一二三四篇! 附上链接: iOS 编写高质量Objective-C代码(一) iOS 编写高质量Objective-C代码(二) iOS 编写高质量Objective-C代码(三) iOS 编写高质量...

MrLiuQ
08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.X部署Zabbix4.0

  /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p 密码 数据库导入完成后需要个Zabbix配置数据库密码,修改/etc/zabbix/zabbix_server.conf文件:   DBPassword......

寰宇01
5分钟前
1
0
工厂模式

(从别人里copy的,方便自己查看) 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决:主要解决接口选择的问题。 何时使...

南桥北木
31分钟前
0
0
rabbitmq学习(一)

RabbitMQ是目前非常热门的一款消息中间件,具有高可靠、易拓展、高可用及丰富的功能 1.什么是消息中间件 消息是指在应用间传送的数据。包含文本字符串、JSON、内嵌对象 消息队列中间件(消息...

hensemlee
35分钟前
1
0
学习设计模式——原型模式

1. 认识原型模式 1. 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 2. 结构: Prototype:声明一个克隆自身的接口,用来约束想要克隆自己的具体实现类,要求这些类...

江左煤郎
41分钟前
1
0
观察者模式

观察者模式的套路 有如下角色: 事件,比如修改,用户点击; 事件队列,触发事件之后,会把事件一个一个放入事件队列 监听器,采用某种方式(一般是轮询,或者io阻塞机制),来判断事件队列是否有新的未...

黄威
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部