回顾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;

你可能感兴趣的:(回顾enum,属性,方法的一些简单写法)