//
//  NSString+GM.h
//  Gengmei
//
//  Created by licong on 12/28/15.
//  Copyright © 2015 Wanmeichuangyi. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
*引用base64 库 因不更新所以先拿过来
*
*/

@interface NSData (Base64)

+ (NSData *)dataWithBase64EncodedString:(NSString *)string;
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth;
- (NSString *)base64EncodedString;

@end

/**
 *  常用且按功能块比较难划分的扩展方法
 */

@interface NSString (GM)

/**
 *  @author licong, 16-12-28 12:12:13
 *
 *  判断一个字符串是否为空(包括nil/@""/nil)
 *
 *  @return 布尔值，YES表示字符串不为空，NO表示字符串为空
 *
 *  @since 5.8
 */
- (BOOL)isNonEmpty;

/*!
 *  @author zhaiguojun, 16-04-21
 *
 *  @brief 把字典和数组转成string
 *
 *  相当于调用 [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
 *  @return 转换后的string
 *
 *  @since 5.9.3
 */
+ (NSString*)convertToPrettyPrintedJsonString:(id)object;

/**
 把字典和数组转成简短的json string
 相当于调用 [NSJSONSerialization dataWithJSONObject:object options:0 error:&error];
 */
+ (NSString *)convertToBriefJsonString:(id)object;

/**
 *  @author licong, 16-12-28 12:12:16
 *
 *  得到非空string
 *
 *  @return 返回一个非空的字符串
 *
 *  @since 5.8
 */
+ (NSString *)safeStringWithString:(NSString *)string;

/**
 *  @brief  是否为纯数字
 *
 *  @param string 要检查的字符串
 *
 */
+ (BOOL)isPureInt:(NSString *)string;


/**
 *  @brief  是否为手机号
 *
 *  @param mobileNum 0~9 11位即可
 *
 */
+ (BOOL)isMobileNumber:(NSString *)mobileNum;

/**
 * 问题来自于服务器返回Str 我们当做int来解析会crash 古做一下兼容（目前来看 7.3.0 之前不会发生crash 7.3.0之后必crash）
 */
- (unsigned long long)unsignedLongLongValue;

/**
 *  @brief  是否为邮箱格式
 *
 *  @param string 要检查的字符串
 *
 */
+ (BOOL)isValidateEmail:(NSString *)email;
@end


/**
 *
 *  将类似URL的query参数解析成字典
 *
 */
@interface NSString (paresQuery)

/**
*  @author licong, 16-12-28 18:12:14
*
*  解析url中的query,转成字典格式
*
*  @return 解析好的字典
*
*  @since 5.8
*/

- (NSDictionary*)urlQueryToDictionary;


/**
 *  @author licong, 16-12-28 18:12:11
 *
 *  解析query字符串为字典比如:a=b&c=d
 *
 *  @return 解析好的字典
 *
 *  @since 5.8
 */
- (NSDictionary*)queryToDictionary;

@end


/**
 *
 *  根据String的Font计算String的size
 *
 */
@interface NSString (calculatorSize)


/**
 *  @author licong, 16-12-28 18:12:38
 *
 *  计算String当行间距为0的时候的高度和宽度
 *
 *  @param font String的font
 *  @param size String限定的size
 *
 *  @return String实际(如果是多行，则经过折行后)的size
 *
 *  @since 5.8
 */
- (CGSize)sizeWithFont:(UIFont *)font boundSize:(CGSize)size;


/**
 *  @author licong, 16-12-28 18:12:05
 *
 *  计算String在某个行间距下，高度和宽度
 *
 *  @param font        String的font
 *  @param size        String限定的size
 *  @param lineSpacing 设定的行间距
 *
 *  @return String在设定的行间距下，实际(如果是多行，则经过折行后)的size
 *
 *  @since 5.8
 */
- (CGSize)sizeWithFont:(UIFont *)font boundSize:(CGSize)size lineSpacing:(CGFloat)lineSpacing;

@end



@interface NSString (URLEncoding)

/**
 *  @author licong, 16-12-29 16:12:45
 *
 *  URL编码
 *
 *  @return 编码后的URL
 *
 *  @since 5.8
 */
- (NSString*) URLEncodedString;

/**
 *  @author licong, 16-12-29 16:12:08
 *
 *  URL解码
 *
 *  @return 解码URL
 *
 *  @since 5.8
 */
- (NSString*) URLDecodedString;

/**
 URL编码

 @return 编码后的URL
 */
- (NSString *)URLEncodeString;

@end

@interface NSString (Trim)
/**
 *  @author licong, 16-12-28 18:12:04
 *
 *  去除字符串两头的空白（空格及换行）
 *
 *  @return 无空格的字符串
 *
 *  @since 5.8
 */
- (NSString *)trimBothEnd;
- (NSString *)trimSpace;
- (NSString *)trimInnerReturn;
- (NSString *)trimNewlinesToOne;

/**
*引用base64 库 因不更新所以先拿过来
*
*/

+ (NSString *)stringWithBase64EncodedString:(NSString *)string;
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth;
- (NSString *)base64EncodedString;
- (NSString *)base64DecodedString;
- (NSData *)base64DecodedData;
@end
