Swift风格的几个常用结构体

从Objective-C转到Swift,感觉没有花费多大功夫。
但有些代码的细节仍旧看起来像OC。
嘛~想要成为一名纯的Swifter,写出的代码应该也是具有Swift风格的才对~

今天的笔记内容包含下面几个家伙:
CGRect, CGSize, CGPoint

语义更明确的写法

Objective-C风格:

1
2
3
let rect = CGRectMake(0, 0, 100, 100)
let point = CGPointMake(0, 0)
let size = CGSizeMake(100, 100)

对于开发者来说这些语句早就烂熟于心,可以轻松理解这段代码的含义,不会纠结这些参数代表什么。
虽然它不影响程序本身,但本着语义明确的良好代码风格(装..),这样写会更好:

1
2
3
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
let size = CGSize(width: 100, height: 100)
let point = CGPoint(x: 0, y: 0)

加入了参数描述,第一眼就能明白代码的含义了。这里的参数可以是CGFloatIntDouble

类似的:

let rect  = CGRect.zero  
let size  = CGSize.zero
let point = CGPoint.zero

这里只是相对平时多一个字符而已,但这样会更清晰,在Xcode中,.前后部分会分开高亮。

直接修改结构体的值

以前使用OC的时候,修改CGRect的值我一般是这样写的:

CGRect frame = CGRectMake(0, 0, 100, 100);
UIView *view = [[UIView alloc] initWithFrame: frame];
CGRect newFrame = view.frame;
newFrame.size.width = view.frame.origin.x + 10;
view.frame = newFrame;

讲真,这样写挺不爽的…为了修改CGRect的某个值而去创建一个新的结构体…
现在,不仅可以直接修改frame中某个变量的值,也可以直接对frame包含的originsize结构体重新赋值,这样写方便和清爽了很多:

let view = UIView(frame: .zero)
view.frame.size   = CGSize(width: 10, height: 10)
view.frame.origin = CGPoint(x: 10, y: 10)

嗯…用了这个特性让我想完全放弃OC了…

还有点

以上的这些写法也同样适用于UIKit的其他部分结构体:

//UIEdgeInsets      
var edgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
edgeInsets.top += 10
//UIOffset
var offset = UIOffset(horizontal: 10, vertical: 10)
offset.vertical += 10

参考:Anddy Hope

请我吃颗糖,鼓励我继续创作!