老师,照同学的改了,依然不对,且不知道set方法究竟哪里体现应用了,求解。

老师,照同学的改了,依然不对,且不知道set方法究竟哪里体现应用了,求解。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
无毁湖光 2018-09-30 00:40:08

不要用 void ,setage是要设置值的,用NSString*,因为是需要返回一个字符串“成年人和未成年人”也不要再这里打印。


参考

m文件

-(NSString*) setAge:(int) newAge{

    if (newAge >= 18) {

        age = @"成年人";

    }else{

        age = @"未成年人";

    }

    return age;

}


-(NSString*) getAge{

    return age;

}


h文件

@interface Person : NSObject{

    NSString *age;

}


-(NSString*) setAge:(int) newAge;


-(NSString*) getAge;


@end


main文件

    @autoreleasepool {

        Person *person = [[Person alloc]init];

        [person setAge:18];

        NSLog(@"%@",[person getAge]);

    }

    return 0;


axiba 2018-06-25 13:31:32

set和get是魔术方法,看你代码后发现你可能没明白setAge的用法。本质上就是你在定义和赋值一个属性aaa时,通过setAaa可以让程序自动执行方法下面的内容。就题目本身而言,在main函数下,创建一个对象后,p1.age = 20即可以自动执行setAge的方法,而无需再去调用[p1 SetAge],另外,你还需要注意方法名的大小写。

imoocLovers 2018-06-20 09:43:40

这代码的问题主要集中在main方法中:

①在main方法中p1.OAge = 20;这句话不正确,首先OAge不是Person这个类中的属性,不能使用点语法进行调用和赋值。其次[p1.SetAge];这段代码是使用实例对象p1调用Person类中的方法SetAge,正确写法是[p1 SetAge];在这里就不要使用点语法了。

②将mian方法中修改一下,如下:

        Person *p1 = [[Person alloc] init];
        [p1 SetAge:20];

修改后可以运行。

③最后代码规范上,方法-(void)setAge:(int)age; 首字母s尽量小写

祝学习愉快~


提问者 慕粉1247125 2018-06-19 21:59:52
  • 提问者 慕粉1247125 #1
    这是个什么错误啊?蒙圈中。。。。。。
    2018-06-19 22:01:22
  • 提问者 慕粉1247125 #2
    老师,为什么我在main.m中调用setAge方法会被判定为没定义,不调用反而出现了正常的结果呢?难道说person.h文件中声明的方法,仅对person.m文件可见并有效吗?但我似乎又觉得哪里不对。
    2018-06-19 22:28:24
  • 无毁湖光 回复 提问者 慕粉1247125 #3
    你 那个是调用属性了。应该是 [p1 setAge:18]
    2018-09-30 00:42:10
imoocLovers 2018-06-19 09:45:00

在main方法中Person对象p1.Age = 20;执行这句话的时候,系统会执行Age的set方法。在mian方法的第8行使用中括号调用setAge:方法的时候可以不再使用点语法了。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师