iOS - NSString 封装
在实际项目开发过程中,发现字符串使用频率还是非常高的,NSString提供了很多相关的API,但是在开发过程中发现很多业务功能都是相同的。因此根据在开发过程中遇到的字符串使用场景,进行了简单封装。具体代码如下:
NSString+Category.h 代码:
//
// NSString+Category.h
// myApplication
//
// Created by xujinzhong on 2018/3/13.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import <Foundation/Foundation.h> @interface NSString (Category) - (BOOL)isBlank;
- (BOOL)isValid;
- (NSString *)removeWhiteSpacesFromString; - (NSUInteger)countNumberOfWords;
- (BOOL)containsString:(NSString *)subString;
- (BOOL)isBeginsWith:(NSString *)string;
- (BOOL)isEndssWith:(NSString *)string; - (NSString *)replaceCharcter:(NSString *)olderChar withCharcter:(NSString *)newerChar;
- (NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end;
- (NSString *)addString:(NSString *)string;
- (NSString *)removeSubString:(NSString *)subString; - (BOOL)containsOnlyLetters;
- (BOOL)containsOnlyNumbers;
- (BOOL)containsOnlyNumbersAndLetters;
- (BOOL)isInThisarray:(NSArray*)array; + (NSString *)getStringFromArray:(NSArray *)array;
- (NSArray *)getArray; + (NSString *)getMyApplicationVersion;
+ (NSString *)getMyApplicationName; - (NSData *)convertToData;
+ (NSString *)getStringFromData:(NSData *)data; - (BOOL)isValidEmail;
- (BOOL)isVAlidPhoneNumber;
- (BOOL)isValidUrl; @end
NSString+Category.m 代码:
//
// NSString+Category.m
// myApplication
//
// Created by xujinzhong on 2018/3/13.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import "NSString+Category.h" @implementation NSString (Category) //字符串是否为空
-(BOOL)isBlank
{
return ([[self removeWhiteSpacesFromString] isEqualToString:@""]) ? YES : NO;
} //字符串为空或nil
-(BOOL)isValid
{
return ([[self removeWhiteSpacesFromString] isEqualToString:@""] || self == nil || [self isEqualToString:@"(null)"]) ? NO :YES;
} //在字符串中删除空格
- (NSString *)removeWhiteSpacesFromString
{
NSString *trimmedString = [self stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return trimmedString;
} //字符串中包含单词数
- (NSUInteger)countNumberOfWords
{
NSScanner *scanner = [NSScanner scannerWithString:self];
NSCharacterSet *whiteSpace = [NSCharacterSet whitespaceAndNewlineCharacterSet]; NSUInteger count = ;
while ([scanner scanUpToCharactersFromSet: whiteSpace intoString: nil]) {
count++;
} return count;
} // 字符串中是否包含子字符串
- (BOOL)containsString:(NSString *)subString
{
return ([self rangeOfString:subString].location == NSNotFound) ? NO : YES;
} // 字符串从给定的字符串开始
- (BOOL)isBeginsWith:(NSString *)string
{
return ([self hasPrefix:string]) ? YES : NO;
} // 字符串以给定的字符串结束
- (BOOL)isEndssWith:(NSString *)string
{
return ([self hasSuffix:string]) ? YES : NO;
} // 用新字符替换字符串中的特定字符
- (NSString *)replaceCharcter:(NSString *)olderChar withCharcter:(NSString *)newerChar
{
return [self stringByReplacingOccurrencesOfString:olderChar withString:newerChar];
} // 从特定的位置获取子字符串,以使其正确
- (NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end
{
NSRange r;
r.location = begin;
r.length = end - begin;
return [self substringWithRange:r];
} // 将子字符串添加到主字符串
- (NSString *)addString:(NSString *)string
{
if(!string || string.length == )
return self; return [self stringByAppendingString:string];
} // 从字符串中删除指定字符串
-(NSString *)removeSubString:(NSString *)subString
{
if ([self containsString:subString])
{
NSRange range = [self rangeOfString:subString];
return [self stringByReplacingCharactersInRange:range withString:@""];
}
return self;
} // 字符串只包含字母
- (BOOL)containsOnlyLetters
{
NSCharacterSet *letterCharacterset = [[NSCharacterSet letterCharacterSet] invertedSet];
return ([self rangeOfCharacterFromSet:letterCharacterset].location == NSNotFound);
} // 字符串只包含数字
- (BOOL)containsOnlyNumbers
{
NSCharacterSet *numbersCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@""] invertedSet];
return ([self rangeOfCharacterFromSet:numbersCharacterSet].location == NSNotFound);
} // 字符串中包含数字和字母
- (BOOL)containsOnlyNumbersAndLetters
{
NSCharacterSet *numAndLetterCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
return ([self rangeOfCharacterFromSet:numAndLetterCharSet].location == NSNotFound);
} // 字符串包含在数组中
- (BOOL)isInThisarray:(NSArray*)array
{
for(NSString *string in array) {
if([self isEqualToString:string]) {
return YES;
}
}
return NO;
} // 数组转换为字符串
+ (NSString *)getStringFromArray:(NSArray *)array
{
return [array componentsJoinedByString:@" "];
} // 字符串转换为数组
- (NSArray *)getArray
{
return [self componentsSeparatedByString:@" "];
} // 获取应用程序版本
+ (NSString *)getMyApplicationVersion
{
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *version = [info objectForKey:@"CFBundleVersion"];
return version;
} // 获取应用程序名称
+ (NSString *)getMyApplicationName
{
NSDictionary *info = [[NSBundle mainBundle] infoDictionary];
NSString *name = [info objectForKey:@"CFBundleDisplayName"];
return name;
} // 字符串转换为NSData
- (NSData *)convertToData
{
return [self dataUsingEncoding:NSUTF8StringEncoding];
} // NSData转换为字符串
+ (NSString *)getStringFromData:(NSData *)data
{
return [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
} // 是否为邮件格式
- (BOOL)isValidEmail
{
NSString *regex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTestPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [emailTestPredicate evaluateWithObject:self];
} // 是否为电话格式
- (BOOL)isVAlidPhoneNumber
{
NSString *regex = @"[235689][0-9]{6}([0-9]{3})?";
NSPredicate *test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
return [test evaluateWithObject:self];
} // 是否为URL格式
- (BOOL)isValidUrl
{
NSString *regex =@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
return [urlTest evaluateWithObject:self];
} @end
iOS - NSString 封装的更多相关文章
- IOS开发-封装数据库sqlite3之为何选择FMDB
为什么使用第三方轻量级框架FMDB? FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语 ...
- iOS 自己封装的网络请求,json解析的类
基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...
- iOS | AFNetworking封装
为大家分享一个IOS处理网络请求,网络上传,网络下载等功能全面的一个第三方框架-AFNetworking,这是一个使用非常方便的网络框架. 最新的版本是基于NSURLSession,原来的NSURLC ...
- iOS (封装)一句话调用系统的alertView和alertController
前言: 本文仅作参考存留,请用新版封装:iOS 更加优雅便捷的UIAlertView/UIAlertController封装使用 UIAlertController是iOS8.0之后出来的新方法,其将 ...
- iOS NSURLSession 封装下载类
周六日鼓捣NSURLSession,效率虽然低下,最后还是有了一点点眉目.昨天和汤老师一起测试,又对它加深了一点理解.趁热打铁,先总结一下. 封装的类,对外用的方法,我写的是类方法,所以,在类方法中, ...
- ios uiview封装动画(摘录)
iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...
- iOS方法封装
(void) setSubView:(UIView *)masterView subCCGRect:(CGRect)subCCGRect imageName:(NSString *)imageName ...
- 勾勾街:用最小的成本封装一个苹果IOS APP! 封装技术再度升级~
勾勾街自上线以来,“遭到”大量群众的喜爱... 只能用遭到这个词儿,因为大家好像都被憋了很久了,哈哈哈! 我们的技术是先进的,也是首创的,但最近发现了另一个网站,把我们的技术抄走了.... 本来这个事 ...
- ios中封装网络和tableview的综合运用
1:封装网络请求 类 #import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" #import ...
随机推荐
- MFS安装配置使用
MFS server:192.168.209.18groupadd mfsuseradd -g mfs mfscd /usr/srctar xzvf mfs-1.6.27-5.tar.gzcd mfs ...
- jmeter性能指标
Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...
- idea 调试技巧1
1 多线程调试 开发过多线程应用的朋友应该有体会,有些时候,为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下. 在IDE里断点停下来的时候,可以切换到另外的线程 ...
- linux工具————fish shell
1.说明 fish is a fully-equipped command line shell (like bash or zsh) that is smart and user-friendly. ...
- C# 32位程序在64位系统下运行中解决重定向问题
在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与 ...
- iframe父页面和子页面相互调用的方法
随着W3C一声令下,几年前使用非常频繁的frameset + frame已完成使命,光荣退伍.作为frameset的替代方案(姑且这么称吧),iframe的使用也多了起来.较frameset方案,if ...
- Linear Algebra - Determinant(几何意义)
二阶行列式的几何意义 二阶行列式 \(D = \begin{vmatrix}a_1&a_2\\b_1&b_2\end{vmatrix} = a_1b_2 - a_2b_1\) 的几何意 ...
- DSOFramer控件使用注意事项
1.引用dll==>AxInterop.DSOFramer.dll ==>Interop.DSOFramer.dll ==>WindowsFormsIntegration ==> ...
- 关于define
<?php define('local','localhost');//echo constant('local');exit(); define('username','root'); def ...
- 3dmax————
去掉阴影 建模中去掉阴影,有时候阴影会挡住视野 , 显示法线 转到可编辑网格,选择面,选择 ,注意下面那个比例调大点,否则看不清楚