OC中常用的結構體有NSRange、(NSPoint、NSSize、NSRect)后面三個由于開發中,為了跨平臺的原因。
一般都用CGPoint、CGSize、CGRect代替。所以我們主要介紹和掌握NSRange、CGPoint、CGSize、CGRect
即可。(
在OC中NSPoint、NSSize、NSRect其實是對應CG類型的typedef,也就是說他們是等價的)。
1 #import <Foundation/Foundation.h>
2
3 int main(int argc, const char * argv[]) {
4 /*
5 NSRange {location, length};
6 NSPoint {} \ CGPoint
7 NSSize {} \ CGSize
8 NSRect {} \ CGRect
9
10 NSPoint、NSSize、NSRect都是對應的
11 CGPoint、CGSize、CGRect的typedef
12 所以以上這三個于其對應的都一樣。
13 */
14
15 NSRange r1 = {2, 4}; // 不用,表達不清楚
16 NSRange r2 = {.location = 2, .length = 4}; // 不用,太冗余
17
18 // 一般用這個, 因為函數的參數有說明參數的意思。
19 NSRange r3 = NSMakeRange(2, 4);
20 /*
21 NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
22 NSRange r;
23 r.location = loc;
24 r.length = len;
25 return r;
26 }
27 */
28
29 NSString *str = @"i love oc";
30 // 查找某個字符串在Str中的范圍
31 // 如果找不到, length = 0, location = NSNotFound = -1
32 NSRange loveRange = [str rangeOfString:@"love"];
33 NSLog(@"loc = %ld, len = %ld", loveRange.location, loveRange.length);
34
35
36 /*
37 struct CGPoint {
38 CGFloat x; // CGFloat ~~~ double
39 CGFloat y;
40 };
41
42 struct CGSize {
43 CGFloat width; // 寬
44 CGFloat height; // 高
45 };
46
47 struct CGRect {
48 CGPoint origin; // 左上角的點位置
49 CGSize size; // 長、寬
50 };
51 */
52 /*
53 總結:
54 開發中一般都用CGPoint、CGSize、CGRect, 因為這些是跨平臺的。
55 創建CG結構體的函數都是結構體函數名開頭 + Make
56
57 CGFloat等效于double類型。CGPoint用來表示一個點
58 CGSize用來表示大小的寬高。
59 CGRect是由CGPoint、CGSize組成,表示一個矩形。
60
61 */
62
63 CGRect r = CGRectMake(0, 0, 100, 50); // 前兩個構成CGPoint, 后兩個構成CGSize
64 /*
65 CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
66 {
67 CGRect rect;
68 rect.origin.x = x;
69 rect.origin.y = y;
70 rect.size.width = width;
71 rect.size.height = height;
72 return rect;
73 }
74
75 */
76
77
78 // 快速返回結構體內部的成員值。
79 /*
80 NSStringFromRange
81 NSStringFromPoint
82 NSStringFromSize
83 NSStringFromRect
84 */
85 NSString *str1 = NSStringFromRect(r);
86 NSLog(@"%@", str1);
87
88 NSString *str2 = NSStringFromRange(r1);
89 NSLog(@"%@", str2);
90 return 0;
91 }
92 /*
93 總結:
94 1.各個結構體的含義
95 NSRange:表示范圍(loc, len)。
96 CGPoint:表示二維坐標系的一個點
97 CGSize:表示二維空間的一個大小
98 CGRect:表示二維空間的一個矩形
99
100 2.創建結構體的常用方法:使用函數
101 CG結構體名 + Make
102
103 3.快速打印結構體的方式
104 NSStringFromRange\NSStringFromPoint\NSStringFromSize\NSStirngFromRect
105 都是返回結構體內部的數據成員用字符串拼接起來。
106
107 4.CGFloat的本質:double
108 */