- 首页 > it技术 > >
回顾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;
推荐阅读