黑马程序员技术交流社区

标题: 请教下OC中类的使用问题 [打印本页]

作者: z82454642    时间: 2014-3-13 22:53
标题: 请教下OC中类的使用问题
本帖最后由 z82454642 于 2014-3-14 00:08 编辑

如下 Person类有一个成员变量Date类型的_birthday;
  1. @interface Person : NSObject
  2. {
  3.     Date _birthday;
  4. }
复制代码


Date类型是个结构体
  1. typedef struct{
  2.     int year;
  3.     int month;
  4.     int day;
  5. }Date;
复制代码


请问创建Person对象后,如何给_birthday内的各个变量赋值




问题已解决...自己想到一个笨方法
在类内写个方法_birthday 结构内的成员赋值,然后返回_birthday 的值
- (Date)theDayOfBorn:(int)day andtheMonthOfBorn:(int)month andtheYearOfBorn:(int)year
{
    Date date;
    date.day = day;
    date.year = year;
    date.month = month;
    return date;
}


作者: lixiangzhou    时间: 2014-3-13 23:04
OC 中给对象的变量赋值是通过setter方法的,但结构体的赋值还和C的一样
@interface Person : NSObject
{
    Date _birthday;
}
- (void)setBirthday;
@end
在Person的实现中
@implementation Person
- (void)setBirthday:(Date *)birthday
{
    _birthday = birthday;
}
@end

写完上面代码后(假设date是结构体)
date->year = 2000;
date->month = 3;
date->day = 23;
然后就可以赋值了(假设person 是Person对象)
[person setBirthday:date]

作者: z82454642    时间: 2014-3-13 23:15
lixiangzhou 发表于 2014-3-13 23:04
OC 中给对象的变量赋值是通过setter方法的,但结构体的赋值还和C的一样
@interface Person : NSObject
{

亲,具体点,不太理解,date是一个Date类型的结构么?
是的话在哪里进行赋值操作
创建对象
Person *p = [Person new];
创建完对象怎么操作Date数据
p.birthday->year = 100?
作者: cnchenys    时间: 2014-3-14 00:00
Person *p = [[Person alloc] init];
    Date birthday = {2011,11,11};
    p.birthday = birthday;

这样即可,结构体本质是对象,所以调用setbirthday方法时,先创建一个Date对象,再赋值,就OK
作者: z82454642    时间: 2014-3-14 00:16
cnchenys 发表于 2014-3-14 00:00
Person *p = [ init];
    Date birthday = {2011,11,11};
    p.birthday = birthday;

这个方法我试了下,对结构成员顺序有要求的,赋值必须对应到成员,不然容易出错
如果定义结构时成员顺序是day month year
按照这样做的话 day = 2011 了...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2