iOS之有用的分类(UsefulCategory)


一,Usefulcategory说明


部分category收集于blog,实际项目等等中. 本人对其重新”筛选,整理,优化,封装”.每个分类都有详细的解释和使用说明.很有用!
Github地址: https://github.com/LuochuanAD/UsefulCategory


二,Usefulcategory使用


- NSObject(Safe)

NSObject(Safe)

导入到项目中, 此分类需在MRC环境下使用,需添加-fno-objc-arc. 防止崩溃,提高代码的健壮性.强烈推荐(因为我自己写的没有它好,这个分类是用的别人). 该分类包含NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSAttributedString,NSMutableAttributedString,NSSet,NSMutableSet,NSOrderedSet,NSMutableOrderedSet,NSUserDefaults,NSCache.

- UITableView

UITableView

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger,CustomAnimation){
    CustomAnimationTypeMove,        //左侧飞入
    CustomAnimationTypeAlpha,       //透明
    CustomAnimationTypeFall,        //上面掉落
    CustomAnimationTypeShaKe,       //抖动动画
    CustomAnimationTypeOverTurn,    //翻转动画
    CustomAnimationTypeToTop,       //从下往上
    CustomAnimationTypeSpringList,  //从上往下弹动动画
    CustomAnimationTypeShrinkToTop, //从下往上挤向顶部
    CustomAnimationTypeLayDown,     //从上往下展开
    CustomAnimationTypeRote,        //翻转动画
};

@interface UITableView (CellAnimation)
/**
 *  UItableView 显示动画
 *
 *  @param type 动画类型
 */
- (void) customAnimation:(CustomAnimation)type;

- NSData

NSData

#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger,DataEncryption){
    DataEncryptionMD2,
    DataEncryptionMD4,
    DataEncryptionMD5,
    DataEncryptionSHA1,
    DataEncryptionSHA224,
    DataEncryptionSHA256,
    DataEncryptionSHA384,
    DataEncryptionSHA512,
};

@interface NSData (Encryption)

/*
 *  NSData 加密
 *
 *  @param type 加密类型
 */
- (NSData *) dataEncryptionType:(DataEncryption)type;

- NSObject

NSObject

NSObject+Category.h

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

@interface NSObject (Category)
@property (nonatomic, strong, readonly) NSMutableArray *associatedObjectNames;

/**
 *  为当前object动态增加分类
 *
 *  @param propertyName   分类名称
 *  @param value  分类值
 *  @param policy 分类内存管理类型
 */
- (void)objc_setAssociatedObject:(NSString *)propertyName value:(id)value policy:(objc_AssociationPolicy)policy;
/**
 *  获取当前object某个动态增加的分类
 *
 *  @param propertyName 分类名称
 *
 *  @return 值
 */
- (id)objc_getAssociatedObject:(NSString *)propertyName;
/**
 *  删除动态增加的所有分类
 */
- (void)objc_removeAssociatedObjects;

/**
 *  获取对象的所有属性
 *
 *  @return 属性dict
 */
- (NSArray *)getProperties;

NSObject+ModelWithDictionary.h

#import <Foundation/Foundation.h>

@interface NSObject (ModelWithDictionary)

/**
 *  Model转字典
 */
- (NSDictionary*)toDictionary;
/**
 *  字典转Model (警告:字典只能为一层结构)
 */
-(id) initWithDictionary:(NSDictionary*)dictionary;

NSObject+PerformBlock.h

#import <Foundation/Foundation.h>

@interface NSObject (PerformBlock)
// try catch
+ (NSException *)tryCatch:(void(^)())block;
+ (NSException *)tryCatch:(void(^)())block finally:(void(^)())aFinisheBlock;

/**
 *  在主线程运行block
 *
 *  @param aInMainBlock 被运行的block
 */
+ (void)performInMainThreadBlock:(void(^)())aInMainBlock;
/**
 *  延时在主线程运行block
 *
 *  @param aInMainBlock 被运行的block
 *  @param delay        延时时间
 */
+ (void)performInMainThreadBlock:(void(^)())aInMainBlock afterSecond:(NSTimeInterval)delay;
/**
 *  在非主线程运行block
 *
 *  @param aInThreadBlock 被运行的block
 */
+ (void)performInThreadBlock:(void(^)())aInThreadBlock;
/**
 *  延时在非主线程运行block
 *
 *  @param aInThreadBlock 被运行的block
 *  @param delay          延时时间
 */
+ (void)performInThreadBlock:(void(^)())aInThreadBlock afterSecond:(NSTimeInterval)delay;

NSObject+helper.h

#import <Foundation/Foundation.h>

@interface NSObject (helper)

//交换类方法
+ (void)swizzleClassMethod:(SEL)origSelector withMethod:(SEL)newSelector;

//交换实例方法
- (void)swizzleInstanceMethod:(SEL)origSelector withMethod:(SEL)newSelector;

@end

- NSString

NSString

NSString+Category.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface NSString (Category)

/**
 *  计算文字高度
 *
 *  @param fontSize 字号
 *
 *  @param fixedWidth 控件宽度
 */
- (CGFloat)countHeightOfTextWithFontSize:(CGFloat)fontSize fixedWidth:(CGFloat)fixedWidth;

/**
 *  计算文字宽度
 *
 *  @param fontSize 字号
 *
 *  @param fixedHeight 控件高度
 */
- (CGFloat)countWidthOfTextWithFontSize:(CGFloat)fontSize fixedHeight:(CGFloat)fixedHeight;

NSString+Predicate.h

#import <Foundation/Foundation.h>

typedef NS_ENUM(NSUInteger, PredicateType){
    PredicateType_MobileNo,          //检测有效的电话号码
    PredicateType_RealName,          //检测有效的真实姓名
    PredicateType_Chinese,           //检测是否只有中文
    PredicateType_VerificationCode,  //检测有效的验证码(根据自家的验证码位数进行修改)
    PredicateType_BankCardNumber,    //检测有效的银行卡号
    PredicateType_Email,             //检测有效的邮箱
    PredicateType_LettersAndNumbers, //检测有效的字母和数字
    PredicateType_IDnumberFor15,     //检测有效身份证 15位
    PredicateType_IDnumberFor18,     //检测有效身份证 18位
};

@interface NSString (Predicate)
/**
 *  验证字符串 是否符合正则表达式
 *
 *  @param type 正则表达式类型
 */
- (BOOL)isValidStringWithPredicateType:(PredicateType)type;

NSString+TimeStamp.h

#import <Foundation/Foundation.h>

@interface NSString (TimeStamp)

/**
 *  通过时间戳计算时间差(几小时前、几天前
 *
 *  @param compareDate 需要对比的时间戳
 */
+ (NSString *) compareCurrentTime:(NSTimeInterval) compareDate;

/**
 *  通过时间戳得出对应的时间
 *
 *  @param timestamp 时间戳
 */
+ (NSString *) getDateStringWithTimestamp:(NSTimeInterval)timestamp;

/**
 *  通过时间戳和时间格式 显示时间
 *
 *  @param timestamp 时间戳
 *
 *  @param formatter 格式
 */
+ (NSString *) getStringWithTimestamp:(NSTimeInterval)timestamp formatter:(NSString*)formatter;

- UIButton

UIButton

#import <UIKit/UIKit.h>
@interface UIButton (EnlargeTouchArea)

/**
 *  扩大或缩小 UIButton 的点击范围
 *
 *  @param top    向上增加的点击范围(注:top参数值为负数,则反方向减小点击范围)
 *
 *  @param right  向右增加的点击范围(注:right参数值为负数,则反方向减小点击范围)
 *
 *  @param bottom 向下增加的点击范围(注:bottom参数值为负数,则反方向减小点击范围)
 *
 *  @param left   向左增加的点击范围(注:left参数值为负数,则反方向减小点击范围)
 */
- (void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left;

@end

- UIColor

UIColor

#import <UIKit/UIKit.h>
/**
 *  功能:通过RGB创建颜色
 *
 *  @param red <CGFloat> <范围:0~255.0>
 *  @param green <CGFloat> <范围:0~255.0>
 *  @param blue <CGFloat> <范围:0~255.0>
 *
 *  @return UIColor
 *
 *  example: rgb(173.0,23.0,11.0)
 */
UIColor *rgb(CGFloat red, CGFloat green, CGFloat blue);

/**
 *  功能:通过RGB以及alpha创建颜色
 *
 *  @param red <CGFloat> <范围:0~255.0>
 *  @param green <CGFloat> <范围:0~255.0>
 *  @param blue <CGFloat> <范围:0~255.0>
 *  @param alpha <CGFloat> <范围:0~1.0>
 *
 *  @return UIColor
 *
 *  example: rgbA(173.0,23.0,11.0,0.5)
 */
UIColor *rgbA(CGFloat red, CGFloat green, CGFloat blue, CGFloat alpha);

@interface UIColor (Category)

/**
 *  Create a color from a HEX string.
 *  It supports the following type:
 *  - #RGB
 *  - #ARGB
 *  - #RRGGBB
 *  - #AARRGGBB
 *
 *  @param hexString NSString
 *
 *  @return Returns the UIColor instance
 */
+ (UIColor *)hex:(NSString *)hexString;

/**
 *  通过0xffffff的16进制数字创建颜色
 *
 *  @param aRGB 0xffffff
 *
 *  @return UIColor
 */
+ (UIColor *)colorWithRGB:(NSUInteger)aRGB;
@end

- UIImage
[图片上传失败...(image-f58270-1523607614654)]

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger,ImageBlurType) {
    ImageBlurSoft,
    ImageBlurLight,
    ImageBlurExtraLight,
    ImageBlurDark,
};
@interface UIImage (Category)

/**
 *  创建由颜色生成的图片
 *
 *  @param color 生成图片的色值
 *
 *  @param rect  图片的frame设置
 *
 *  @param roundSize 图片的圆角大小
 *
 *  @param corners 圆角的类型(左上,右上,左下,右下)
 *
 *  @param text 图片上的文字
 */
+ (UIImage *)creatImageWithCustomColor:(UIColor *)color rect:(CGRect)rect andRoundSize:(CGFloat)roundSize byRoundingCorners:(UIRectCorner)corners text:(NSString*)text;

/**
 *  设置图片的圆角及边框
 *
 *  @param radius 圆角大小
 *
 *  @param borderWidth 边框宽度
 *
 *  @param borderColor 边框颜色
 */
- (UIImage *)setImageWithRoundCornerRadius:(CGFloat)radius
                           borderWidth:(CGFloat)borderWidth
                           borderColor:(UIColor *)borderColor;

/**
 *  图片旋转角度
 *
 *  @param degrees 角度
 */
- (UIImage *) imageRotatedByDegrees:(CGFloat)degrees;

/**
 *  图片旋转 (效果自己Run)
 *
 *  @param horizontal 横向
 *
 *  @param vertical 竖向
 */
- (UIImage *)flipHorizontal:(BOOL)horizontal vertical:(BOOL)vertical;

/**
 *  玻璃化效果,这里与系统的玻璃化枚举效果一样,但只是一张图
 *
 *  @param type 玻璃化效果类型
 */
- (UIImage *)createImageWithBlur:(ImageBlurType)type;

/**
 *  玻璃化效果,这里与系统的玻璃化枚举效果一样,但只是一张图
 *
 *  @param tintColor 自定义玻璃化效果颜色
 */
- (UIImage *)imageByBlurWithTint:(UIColor *)tintColor;
/**
 *  自定义玻璃化效果,这里与系统的玻璃化枚举效果一样,但只是一张图;(自定义各种参数)
 */
- (UIImage *)imageByBlurRadius:(CGFloat)blurRadius
                     tintColor:(UIColor *)tintColor
                      tintMode:(CGBlendMode)tintBlendMode
                    saturation:(CGFloat)saturation
                     maskImage:(UIImage *)maskImage;

/**
 *  设置图片的模糊度
 *
 *  @param blur 模糊度0~1之间
 *
 *  @param exclusionPath 模糊路径(可不做设置)
 */
- (UIImage *) boxblurImageWithBlur:(CGFloat)blur exclusionPath:(UIBezierPath *)exclusionPath;

@end

- UILable

UILable

#import <UIKit/UIKit.h>

@interface UILabel (AutoResize)
/**
 *  UIlable控件高度自适应文字实际计算的高度 (注:lable.numberOfLines=0)
 *
 *  @param text lable.text
 */
- (void)setAutoResizeWithText:(NSString*)text;

@end

- UITabBar
[图片上传失败...(image-d68302-1523607614653)]

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, CustomBadgeType){
    kCustomBadgeStyleRedDot,
    kCustomBadgeStyleNumber,
    kCustomBadgeStyleNone
};

@interface UITabBar (CustomBadge)

/**
 *  设置tab上icon的宽度,用于调整badge的位置
 */
- (void)setTabIconWidth:(CGFloat)width;

/**
 *  设置badge的top
 */
- (void)setBadgeTop:(CGFloat)top;

/**
 *  @param type 设置badge类型
 *
 *  @param badgeValue 数值
 *
 *  @param index   第几个tabbarItem (从0开始算)
 */
- (void)setBadgeStyle:(CustomBadgeType)type value:(NSInteger)badgeValue atIndex:(NSInteger)index;

@end

三,UsefulHeader.h


UsefulHeader
#ifndef UsefulHeader_h
#define UsefulHeader_h

/*
 *  WINDOWS 屏幕宽高 (包括横竖屏)
 */
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
#define WINDOWS_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width)
#define WINDOWS_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height)
#define WINDOWS ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale):[UIScreen mainScreen].bounds.size)
#else
#define WINDOWS_WIDTH [UIScreen mainScreen].bounds.size.width
#define WINDOWS_HEIGHT [UIScreen mainScreen].bounds.size.height
#define WINDOWS [UIScreen mainScreen].bounds.size
#endif

/*
 *  设备类型
 */
#define iPhone4_4s ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone5_5s_5c_se ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6_6s_7_8 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6p_6sp_7p_8p ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
#define is_iPhoneX [UIScreen mainScreen].bounds.size.width == 375.0f && [UIScreen mainScreen].bounds.size.height == 812.0f

#define ISIPAD ([[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad)
#define ISIPHONE   ([[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPhone)
/*
 *  TABBARHEIGHT tabbar高度;NAVIGATIONBARHEIGHT 导航栏高度
 */
#define TABBARHEIGHT (is_iPhoneX?83:49)
#define NAVIGATIONBARHEIGHT (is_iPhoneX?88:64)

/*
 *  ColorHex 16进制颜色(example:ColorHex(0xe5e5e5))
 *  RGBA rgba颜色
 */
#define ColorHex(hexValue) [UIColor colorWithRed:((float)((hexValue & 0xFF0000) >> 16))/255.0 green:((float)((hexValue & 0xFF00) >> 8))/255.0 blue:((float)(hexValue & 0xFF))/255.0 alpha:1]
#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
/*
 *  SLog  NSLog封装宏
 */
#define SLog(format, ...) printf("class: <%p %s:(%d) > method: %s \n%s\n", self, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, [[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String] )

/*
 *  AppCurrentLanguage APP当前语言
 */
#define AppCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])

/*
 *  WeakSelf 弱引用;StrongSelf 强引用
 */
#define WeakSelf        @weakify(self);
#define StrongSelf      @strongify(self);
#ifndef weakify
#if DEBUG
#if __has_feature(objc_arc)
#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
#endif
#else
#if __has_feature(objc_arc)
#define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
#endif
#endif
#endif

#ifndef strongify
#if DEBUG
#if __has_feature(objc_arc)
#define strongify(object) autoreleasepool{} __typeof__(object) strong##_##object = weak##_##object;
#else
#define strongify(object) autoreleasepool{} __typeof__(object) block##_##object = block##_##object;
#endif
#else
#if __has_feature(objc_arc)
#define strongify(object) try{} @finally{} __typeof__(object) strong##_##object = weak##_##object;
#else
#define strongify(object) try{} @finally{} __typeof__(object) block##_##object = block##_##object;
#endif
#endif
#endif

/*
 *  GCD_ONCE_BLOCK 单例;
 */
#define GCD_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);
/*
 *  GCD_MAIN_THREAD 主线程;
 */
#define GCD_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
/*
 *  GCD_GLOBAL_QUEUE_DEFAULT 子线程;
 */
#define GCD_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);
/*
 *  GCD_MAIN_DELAY 不堵塞线程并在主线程的延迟执行
 */
#define GCD_MAIN_DELAY(timer,block) dispatch_after(dispatch_time(DISPATCH_TIME_NOW, INT64_C(timer) * NSEC_PER_SEC), dispatch_get_main_queue(), block)
/*
 *  StringIsEmpty 字符串是否为空
 */
#define StringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )
/*
 *  ArrayIsEmpty 数组是否为空
 */
#define ArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0)
/*
 *  DictIsEmpty 字典是否为空
 */
#define DictIsEmpty(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0)
/*
 *  ObjectIsEmpty 对象是否为空
 */
#define ObjectIsEmpty(_object) (_object == nil \
|| [_object isKindOfClass:[NSNull class]] \
|| ([_object respondsToSelector:@selector(length)] && [(NSData *)_object length] == 0) \
|| ([_object respondsToSelector:@selector(count)] && [(NSArray *)_object count] == 0))
/*
 *  FONT 字体大小
 */
#define FONT(F) [UIFont fontWithName:@"FZHTJW--GB1-0" size:F]

#endif /* UsefulHeader_h */

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 幸福的教学生活还有多远 雪 竹 幸福的教学生活离我们还有多远的距...
    xuezhu766阅读 235评论 0 0
  • 每天看看你们就是我生活最大的动力!加油,希望你们都过的快乐!
    天空中的羽毛阅读 176评论 0 0
  • 人们总说能说出口的委屈,都算不得委屈。其实幸福有何尝不是如此?能说出口的幸福,能晒到朋友圈上的幸福,大抵会有所打折...
    人之百态阅读 211评论 0 0