回顾enum,属性,方法的一些简单写法

// enum的写法 typedef enum{ WBUserSex_Man, WBUserSex_Woman }WBUserSex; //typedef NS_ENUM(NSUInteger, <#MyEnum#>) { //<#MyEnumValueA#>, //<#MyEnumValueB#>, //<#MyEnumValueC#>, //}; // //typedef NS_OPTIONS(NSUInteger, <#MyEnum#>) { //<#MyEnumValueA#> = 1 << 0, //<#MyEnumValueB#> = 1 << 1, //<#MyEnumValueC#> = 1 << 2, //}; /*我的看法 1. 添加前缀 *//**标准答案的修改: *1. enum使用NS_Enum 和 NSOPTIONS *2. 性格中仅仅包括男女不够严谨 */// 1. 冒号前后都有空格 @interface WBUserModel : NSObject// 2. 属性的写法 /** 我的看法: 1> property 后要空一格 2> 括号内要包含属性的基本特征,比如原子性,内存管理,沙盒管理,并按此排序有序 3> 属性的基本特征之间用逗号分开,并且后一个属性与逗号之间要空一格 4> 属性名要表达清楚属性的特本含义,让其他程序员一读名字,基本就知道其含义 *//** 标准答案: *1> age属性避免基本数据类型,要用Foundation里的数据类型 int -> NSInteger unsigned -> NSUInteger float -> CGFloat 动画时间 -> NSTimeInterval *2> 这是一个model,login属于业务逻辑,不应该方法这里,无论是mvc还是mvvm模式,都不 应该,mvc放在c,mvvm放在vm里 */ /** name */ @property (nonatomic, copy, readonly) NSString *name; /** age */ @property (nonatomic, assign, readwrite) NSUInteger age; /** WBUserSex */ @property (nonatomic, assign, readonly) WBUserSex sex; // 3. 实例方法的写法/** 我的看法: *1. "-" 符号后面 要空一格,尽量不要使用id,使用instancetype *2. initWith后面就不要跟类名了,直接接参数名就好(比如UserName,直接用name) *3. 参数名尽量简洁,直接表达参数类型和用意, 参数之间的连接不要用and,用空格就好 *4. 方法就是动词,不要加do *5. login本身就是一个词,不需要把in的首字母大写 *//** 标准答案: *1. and不应该连接两个参数,应该是两个操作,但即使是有两个操作,也应该是分开来写 *2. 方法只给了name、sex的初始化,那么年龄呢?参数不全 *3. 初始化方法要么提供所有参数(designated初始化),要么提供部分参数,然后调用 designated初始化方法完成实例化,由于这里漏掉了age,因此age是可修改的,应该使用 readwrite,而sex是在初始化方法里,则应该是不允许修改,所以readonly *4. 根据接口设计原则,在设计好初始化方法后,理应搭配一个快捷构造方法(+) *5. 在设计好所有参数的初始化方法后,理应把所有参数设计为readonly,外面不允许修改,只 允许在初始化时,修改属性 *6. 比如userModelWithUserName可以简化为userWithName,能表达寓意,又简洁即可 *7. 属性的排列顺序应该是:原子性、可读可写性、内存管理。 */ - (instancetype)initWithName:(NSString *)name age:(NSUInteger)age sex:(WBUserSex)sex; - (instancetype)initWithName:(NSString *)name sex:(WBUserSex)sex; + (instancetype)userWithName:(NSString *)name age:(NSUInteger)age sex:(WBUserSex)sex; // 这个model要还是不要?这个model不需要,足够简洁,能表达含义即可- (void)login;

    推荐阅读