一、常用结构体
1、NSRange
NSRange的定义
typedef struct _NSRange
{
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象的长度。他们都是NSUInteger类型。 而NSUInteger类型的定义如下:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef unsigned long NSUInteger;
#else
typedef unsigned int NSUInteger;
#endif
例子:
下面这个例子,将输出IPA
NSString *homebrew = @"Imperial India Pale Ale (IPA)";
// Starting at position 25, get 3 characters
NSRange range = NSMakeRange (25, 3);
// This would also work:
// NSRange range = {25, 3};
NSLog (@"Beer shortname: %@", [homebrew substringWithRange:range]);
搜索字符串:
NSString *homebrew = @"Imperial India Pale Ale (IPA)";
NSRange range = [homebrew rangeOfString:@"IPA"];
// Did we find the string "IPA" ?
if (range.length > 0)
NSLog(@"Range is: %@", NSStringFromRange(range));
上面的程序将输出Range is: {25, 3}。NSStringFromRange()方法,将一个NSRange返回一个NSString。而另外一个函数NSRangeFromString()则是将NSString转换为NSRange
下面这个例子将从后向前反向搜索字符串:
NSString *homebrew = @"Imperial India Pale Ale (IPA)";
// Search for the "ia" starting at the end of string
NSRange range = [homebrew rangeOfString:@"ia" options:NSBackwardsSearch];
// What did we find
if (range.length > 0)
NSLog(@"Range is: %@", NSStringFromRange(range));
上面的程序将输出:Range is: {12, 2}
ac
如果你要获取一个字符串或者一个数组中的一个子集,那么使用NSRange会很方便的定义这个子集。
NSRange定义
Declaration: typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
创建NSRange的方法定义
Declaration: NSRange NSMakeRange (
NSUInteger loc,
NSUInteger len
);
例如获取一个数组的一个子集:
NSRange range = NSMakeRange(0, 5);
NSArray *subArray = [self.states subarrayWithRange:range];
这样就获得了这个数组中0开始的5个元素的子集
<span style="font-size:14px;">#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
@autoreleasepool {
/*
NSRange(location length)
NSPoint\CGPoint
NSSize\CGSize
NSRect\CGRect
*/
NSString *str = @"i love oc";// love的位置
// location = 2
// length = 3
NSRange r1 = {2,4};
NSRange r2 = {.location =2,.length =4};
NSRange r3 = NSMakeRange(2,4);
NSString *str2 = @"i love oc too";
// 查找某个字符串在str中的范围
//如果找不到,length = 0,location = NSNotFound == -1
NSRange range = [str rangeOfString:@"ve"];
NSLog(@"location = %ld,length = %ld",range.location,range.length);
// range.location == NSUInteger == unsigned long
NSLog(@"%ld",NSNotFound);
}
return 0;
}</span>
、NSPoint\CGPoint表示位置,点 NSPoint == CGPoint CGPoint可以跨平台,所以常用CGPoint
a、这个结构体有两个CGFloat X和CGFloat Y的成员,其实是double类型b、常用定义方法:NSPoint p = CGPointMake(20,20);
CGPoint p2 = NSMakePoint(10,10);
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSPoint p1= NSMakePoint(10,10);
CGPoint p2= CGPointMake(20,20);// 最常用
NSString *str = NSStringFromPoint(p1);
BOOL b = CGPointEqualToPoint(p1, p2);
NSLog(@"%d",b);
NSLog(@"%@",str);
}
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSPoint p1= NSMakePoint(10,10);
CGPoint p2= CGPointMake(20,20);// 最常用
NSString *str = NSStringFromPoint(p1);
BOOL b = CGPointEqualToPoint(p1, p2);
NSLog(@"%d",b);
NSLog(@"%@",str);
}
return 0;
}
3、NSSize\CGSize表示一个UI元素的尺寸NSSize == CGSize
a、这个结构体有两个CGFloat width和CGFloat height成员
b、常用定义方法:NSSize s = CGSizeMake(100,50);
CGSize s = NSMakeSize(100,50);
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
@autoreleasepool {
NSSize s1 = NSMakeSize(100, 50);
CGSize s2 = CGSizeMake(100,50);
NSSize s3 = CGSizeMake(200,60);
NSString *str = NSStringFromSize(s3);
NSLog(@"%@",str);
BOOL b = CGSizeEqualToSize(s1, s2);
NSLog(@"%d",b);
}
return 0;
}
4、NSRect\CGRect (CGPoint,CGSize) NSRect == CGRect
a、NSRect有NSPoint origin和NSSize size两个成员
#import <Foundation/Foundation.h>
// CGRect实现函数
CGRect myRect(CGFloat x,CGFloat y, CGFloat width,CGFloat height)
{
CGRect rect;
rect.origin.x = x;
rect.origin.y = y;
rect.size.width = width;
rect.size.height = height;
return rect;
}
int main(int argc,const char * argv[]) {
@autoreleasepool {
CGRect r1 = CGRectMake(0,0, 100, 50);
/*
struct CGRect {
CGPoint origin;
CGSize size;
*/
// 想要把r1内所有属性输出看看
NSLog(@"x=%.2f, y=%f, width=%f, height=%f",r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);
//另一种方法
NSString * str = NSStringFromRect(r1);
NSLog(@"%@", str);
// 创建NSRect的其他方式
CGRect r2 = {{0,0},{100,50}};
CGPoint p1 = CGPointMake(10,10);
CGSize s2 = CGSizeMake(100,90);
CGRect r3 ={p1,s2};
/*
CGPointZero == CGPointMake(0, 0);返回值是const常量,
CGSizeZero;
CGRectZero;
*/
CGRect r4 = {CGPointZero,CGSizeMake(100,90)};
// 判断两个Rect是否相同
BOOL b = CGRectEqualToRect(r1, r2);
NSLog(@"%d",b);
//下面的高级功能属于CoreGrapgics框架,以CG开头的功能基本都在这里
// 判断Rect是否包含Point
BOOL b2 = CGRectContainsPoint(r4, p1);
/*
point表示rect左上角的点,因为左上角是坐标原点,向右和向下增加
*/
NSLog(@"%d",b2);
}
return 0;
}
二、常用类– NSString
1、NSString : 不可变字符串
GPoint p2 = NSMakePoint(10,10);
#import <Foundation/Foundation.h>
/*
NSString:不可变字符串
NSMutableString:可变字符串,是NSString的子类
*/
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1、字符串的创建
NSString *s1 = @"321321321";
// NSString *S2 = [[[NSString alloc] initWithString:@"jack"];// 这种没人用了现在报错
NSString *s3 = [[NSString alloc]initWithFormat:@"age is %d",10];
// C字符串转OC字符串
NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"];// 不要写@
// 将OC字符串转为C语言字符串
const char * c = [s4 UTF8String];
// 从文件中读取字符串,传入绝对路径, // NSUTF8StringEncoding用到中文就可以用这种编码
NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c"encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",s5);
// URL : 资源路径
// 协议头://路径
// 网络资源http://weibo.com/a.png
// 本地文件file://
// ftp服务器上ftp://
// NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c;
// 利用类方法创建url
NSURL *url = [NSURL fileURLWithPath:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"s6=\n%@", s6);
// 利用类方法创建(一般都会有一个类方法跟对象方法配对)
// [NSString stringWithFormat:@""];
// [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
// [NSURL URLWithString:<#(NSString *)#>];
// 将字符串写入文件:写YES写入失败文件不会创建新文件
[@"jack\njack" writeToFile:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c" atomically: YES encoding:NSUTF8StringEncoding error:nil];
NSString *str = @"12312321";
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
return 0;
}
2、NSMutableString :可变字符串
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is %d",10];
NSString *s2 = [[NSString alloc]initWithFormat:@"age is %d",10];
// 拼接内容到s1的后面
[s1 appendString:@"11 12"];// 无返回值
// 获取“is”的范围
NSRange range = [s1 rangeOfString:@"is"];
// 删除指定范围内的字符
[s1 deleteCharactersInRange:range];
//这个方法会拿到s2的字符串拷贝一份,进行拼接,赋值给s3形成新的字符串,原来的不便
NSString *s3 = [s2 stringByAppendingString:@"11 12"];// 有返回值
}
return 0;
}
两者的主要区别是后者可被改变,前者不可被改变,就算调用了stringByAppendingString:@"11 12"也只是创建一个新的不可变字符串