黑马程序员技术交流社区
标题: - (id)init有没有办法初始化组合的另一个类的变量 [打印本页]
作者: 执着的土豆 时间: 2014-4-29 20:24
标题: - (id)init有没有办法初始化组合的另一个类的变量
本帖最后由 执着的土豆 于 2014-4-29 22:35 编辑
先上代码,再抛问题,希望高手给予解答。
- #import <Foundation/Foundation.h>
- @interface Person : NSObject
- @property int age; //年龄
- @property NSString* name; //姓名
- @end
复制代码 2.定义一个book类,并且组合Person类
1> 一本书
* 书名:《葵花宝典》
* 出版社:绝情谷出版社
* 作者:东方不败、120岁
想初始化时修改默认参数为上述内容,book类的声明与实现如下:
- /*---------------------book类的声明--------------*/
- #import <Foundation/Foundation.h>
- #import "Person.h"
- @interface Book : NSObject
- @property NSString* bookName;
- @property NSString* pub;
- @property Person* auther; //book组合Person类
- @end
复制代码- /*---------------------book类的实现--------------*/
- #import "Book.h"
- @implementation Book
- -(id)init
- {
- if(self=[super init])
- {
- _bookName=@"《葵花宝典》";
- _pub=@"\t绝情谷出版社";
- //能不能在这里初始化修改默认的作者的姓名和年龄
- }
- return self;
- }
- @end
复制代码主函数中调用如下:
现在是这么写的,想在主函数中省去给作者和年龄赋值,直接调用过来输出,求教各位有没有办法,如果有,请科普一下,如果没有,能不能告诉一下,为什么不可以。
- //现在是这么写的,想在主函数中省去给作者和年龄赋值,直接调用过来输出,求教各位有没有办法,如果有,请科普一下,如果没有,能不能告诉一下,为什么不可以。
- Person *auth=[Person new];
- auth.name=@"东方不败";
- auth.age=120;
- book.auther=auth;
- NSLog(@"这本书是%@,出版自%@,作者是%@,作者今年%d岁了",book.bookName,book.pub,book.auther.name,book.auther.age);
复制代码
作者: 执着的土豆 时间: 2014-4-29 21:39
哦,这样,我想到过要传进去一个person对象,在重写init方法的时候,还写成过- (id)init:(Person*)person ,但是不行。 还有一个事情不大确定,是不是组合只能将类的成员变量拿过来用,不能把类的方法也拿过来用么?
作者: 执着的土豆 时间: 2014-4-29 22:28
刚看完自定义构造方法的视频。 重新构造了一下,也能实现了。 不过你给的思路也很好。 如果再有类继承的话,就不需要修改类名,直接new也可以。
- @implementation Book
- -(id)initWithName:(Person *)auther
- {
- if(self=[super init])
- {
- _bookName=@"《葵花宝典》";
- _pub=@"\t绝情谷出版社";
- _auther=auther;
- _auther.name=@"东方不败";
- _auther.age=120;
- }
- return self;
- }
- @end
复制代码
主函数,调用。
- Person *auth=[Person new];
- Book *book=[[Book alloc] initWithName:auth];
- book.auther=auth;
- NSLog(@"这本书是%@,出版自%@,作者是%@,作者今年%d岁了",book.bookName,book.pub,book.auther.name,book.auther.age);
复制代码
作者: 执着的土豆 时间: 2014-4-29 23:39
嗯,我刚才试出来了,刚开始不能用,是因为没有给对象,指针指向的是空,刚才把对象穿过去,直接_auther.name就可以赋值了。 非常感谢 !!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |