NSLog
NSLog 是介绍 OC 的打印方法,同 C 语言中的 print
,使用 NSLog 输出结果,可以在 console 中看到输出信息.
void NSLog(NSString *format, ...);
NSRange
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange 是一个结构体,包含位置(location)和长度(length) 初始化方法:
NSRange NSMakeRange(NSUInteger loc, NSUInteger len)
比如表达从 位置1开始数4位
NSRange range = NSMakeRange(1, 4);
NSString
NSString 是最常见的基本类型之一,用来存储一段文本,NSString 是一个类簇,内部由多个类组成,具体实现时调用哪个类根据其真正的类型决定
实例化
实例化一个常量字符串
NSString *str = @"常量字符串";
当字符串内容需要变化时,使用 stringWithFormat: 方法来初始化,通过占位符如 %@
, %c
, %d
等来替换需要替换的变量
NSString *userName = @"User1";
int age = 18;
NSString *userDescription = [NSString stringWithFormat:@"用户姓名:%@, 年龄:%d", userName, age];
NSLog(@"userDescription = %@", userDescription);
这里再次强调 + -
方法的区别:
+
方法可以直接通过类名调用;-
方法必须通过该类的实例调用。
如前面的 stringWithFormat: 就是+方法,可以直接通过 NSString 调用,与它类似的 - 方法为 initWithFormat:,调用方式:
NSString *userDescription = [[NSString alloc] initWithFormat:@"用户姓名:%@, 年龄:%d", userName, age];
截取字串
文档中提供的方法
- (NSString *)substringFromIndex:(NSUInteger)from;
- (NSString *)substringToIndex:(NSUInteger)to;
- (NSString *)substringWithRange:(NSRange)range;
NSString *string = @"hello iOS";
NSString *str1 = [string substringFromIndex:1];
NSString *str2 = [string substringToIndex:1];
NSLog(@"str1 = %@", str1);
NSLog(@"str2 = %@", str2);
index 是指 string 中的索引,从0开始,上面的 h index 是0,e index 是 1...
上面还有一个方法是 substringWithRange: ,参数是 NSRange
类型,前面介绍过,这里我们传刚刚的 range 值:
NSRange range = NSMakeRange(1, 4);
NSString *str3 = [string substringWithRange:range];
NSLog(@"str3 = %@", str3);
还有一种截取字串的方法,与 NSArray
有关,以某个字符切开,比如前面的 hello iOS,我们以中间的空格为节点,截取子串,这种方法使用得非常多,或是以,
, :
等,尤其是与后台进行数据传输时,经常会用到这种方法
NSArray *array = [string componentsSeparatedByString:@" "];
NSArray *array1 = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"array = %@\n narray1 = %@",array, array1);
NSString *stringHello = array.firstObject;
查
判断某个字符串中是否含有另一个字符串
- (BOOL)hasPrefix:(NSString *)str;
- (BOOL)hasSuffix:(NSString *)str;
- (BOOL)containsString:(NSString *)str NS_AVAILABLE(10_10, 8_0);
- (NSRange)rangeOfString:(NSString *)searchString;
比如判断某个字符串是否是一个网站,判断是否含有 http 前缀 ,是否含有 .com后缀
NSString *url = @"http://xingren.com";
BOOL hasHttpPrefix = [url hasPrefix:@"http"];
BOOL hasComSuffix = [url hasSuffix:@".com"];
搜索字串
BOOL isXingren = [url containsString:@"xingren"];
BOOL isXingren = [url rangeOfString:@"xingren"].length == 0;
这里要注意 containsString 方法是 iOS 8以上 的方法,文档中有标注,NS_AVAILABLE(10_10, 8_0),即必须在 os 10.10 及以上,iOS8.0 及以上才可使用,在os 10.10 或 iOS 8 以下的设备 必须使用 rangeOfString 来辅助判断,我一般是判断 length 是否为0。
字符串的比较
字符串的比较最常用的是 isEqualToString:,判断是否相等。还有多种 compare: 方法,比较时一般是根据比较对象的 ASCII 码值进行比较:
示例:
NSString *string1 = @"123";
NSString *string2 = @"234";
BOOL isEqual = [string1 isEqualToString:string2];
NSComparisonResult result = [string1 compare:string2];
NSString *string3 = @"CAC";
NSString *string4 = @"aAC";
// 忽略大小写, options 还有多种值可选,可查看文档选择
NSComparisonResult result1 = [string1 compare:string2 options:NSCaseInsensitiveSearch];
// 忽略大小写,并只比较第一位字符
NSComparisonResult result2 = [string1 compare:string2 options:NSCaseInsensitiveSearch range:NSMakeRange(0, 1)];
NSMutableString
NSMutableString 是 NSString 的子类,是一个可变的字符串,可以对字符串进行增删改操作,既然是 NSString 的子类,即 它有 NSString 的一切特性,完全可以被作为一个 NSString 使用。
有一点需要注意,OC 中的 mutable 类属性声明都不能是
copy
,否则就失去了mutable的特性,无法使用 mutable 相关的方法和属性,现在不理解没关系,先记着,有个印象,反正最后这些东西都是要重学一遍的
实例化
NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"hello"];
// initWithCapacity 指定了 string 的最大容量,即 string 长度最大只能为30
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:30];
增
[mutableString appendString:@"iOS"];
[mutableString appendFormat:@"%d",2016];
[mutableString insertString:@">" atIndex:0];
自己打印值查看 mutableString
的值有何变化
[mutableString deleteCharactersInRange:NSMakeRange(0, 1)];
改
[mutableString replaceCharactersInRange:NSMakeRange(0, 5) withString:@"嘿"];
我只是列举了常用的方法,其他的方法没有使用场景会比较难说明,当这些方法无法满足需求时,查文档寻找有没有类似的方法可以满足需求。
新手和熟练工的区别最本质的区别 查文档 的能力,还有搜索,百度谷歌必应随便选一个,能解决问题就是好的,现在看的这些不懂完全没有关系,反正到后面你还是会重学一遍,Trust me