黑馬程式員——Foundation中的OC結構體,foundationoc
OC結構體
NSRange
NSPoint\CGPoint
NSSize\CGSize
NSRect\CGRect
1.NSRange:字元在字串中的範圍(位置,長度)
用typedef 定義NSRange結構體類型:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
用法舉例:
NSString*str=@"i love you";
NSRange range1=NSMakeRange(2,4);// 則r表示的即是love的範圍
NSRange range2 = [str rangeOfString:@"love"]; // 定義NSRange結構體類型變數range 並將字串@“love”的位置和長度儲存在range2中。
NSLog(@"loc = %ld length = %ld", range2.location, range2.length);// 列印出love的位置和長度,結果為loc=2 length=4.
若尋找不到某個字串的範圍length=0,location=NSNotFound==-1。
2.NSPoint\CGPoint:確定平面中一個點的座標
typedef struct CGPoint {
CGFloat x;
CGFloat y;
}CGPoint;
typedef CGPoint NSPoint;
用法舉例:
CGPoint p1 = NSMakePoint(10,10);//即點p1的x和y的值都是10.
NSPoint p2 = CGPointMake(5,6); //常用這種寫法; 點p2.x=5,p2.y=6.
結構體可以轉為字串,方便查看結構體各個屬性
NSString *str = NSStringFromPoint(p1);//將點p1轉成字串儲存在str中
NSLog(@"%@", str);//輸入該字串 {10,10}
下面兩種情況都需要在CoreGraphics架構下運行
1.比較兩個點是否相同
BOOL a = CGPointEqualToPoint(CGPointMake(10,10), CGPointMake(10,10));
2.下面表示座標原點
CGPointZero等價於CGPointMake(0,0)
3.NSSize\CGSize 描述一個UI元素的尺寸(寬度,高度)
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
typedef CGSize NSSize;
用法舉例:
NSSize s1 = NSMakeSize(15,20);
CGSize s2 = NSMakeSize(45,23);
NSSize s3 = CGSizeMake(20,20);
NSString *str1 = NSStringFromSize(s1);
NSLog(@"%@", str1);
比較尺寸是否相同要調用的CGSizeEqualToSize函數也需要在CoreGraphics架構下運行。
NSSize s1 = NSMakeSize(15,20);
CGSize s2 = NSMakeSize(45,23);
BOOL b = CGSizeEqualToSize(s1, s2);
// 或寫成行代碼BOOL b =CGSizeEqualToSize(CGSizeMake(15,20),CGSizeMake(45,23));
NSLog(@"%d",b);
4.NSRect\CGRect :確定一個矩形
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
typedef CGRect NSRect;
用法舉例:CGRect定義變數及初始化的方法有下面幾種。
CGRect r = CGRectMake(2,2,50,12);
CGRect r1 = CGRectMake(3,2,25,12);
CGRect r2 = {p1,s1};
CGRect r3 = {{10,20},{100,50}};
CGRect r3 = {CGPointZero, CGSizeMake(50,12)};
同樣也可以將這種結構體轉為字串
NSString *str2 = NSStringFromRect(r);
NSLog(@"%@", str2);
比較兩個矩形是否相等可以用下面函數實現
CGRectEqualToRect(r,r1);
判斷一個點是否在矩形內可以用下面函數實現
BOOL b1=CGRectContainsCGPoint(CGRectMake(50,60,100,90),CGPointMake(90,90));