最近开始使用Swift写项目,这里记录一下一些Swift方面的开源库、学习资料以及小技巧.
开源库
Alamofire:Swift版本的AFNetworkingSnapKit:Swift版本的Masonry,AutoLayout自动布局
- 简单使用:使用前先把view添加到父控件, 用法基本和Masonry相同
1
2
3
4
5
6
7
8self.addSubview(self.titleL)
titleL.snp_makeConstraints(closure: { (make) -> Void in
make.left.equalTo(30)
make.right.equalTo(-30)
//设置优先级priorityLow()
make.bottom.equalTo(imageV.snp_top).offset(-50).priorityLow()
make.top.greaterThanOrEqualTo(self).offset(84).priorityHigh()
}) - 除了equalTo()还有lessThanOrEqualTo()和greaterThanOrEqualTo()
- 设置优先级 priorityLow()等
- 比例 multipliedBy()和dividedBy(), 此时equal()里面的参数必须是自己本身的控件属性如:snp_width
- snp_updateConstraints() 更新约束
- snp_remakeConstraints 重新设置约束
- snp_removeConstraints() 移除约束
小技巧
1. 使用Swift时,Release版本不希望打印输出,而Debug版本正常打印
- 在Target—>Build Setting—>搜索Other Swift Flags—>在Debug 里面添加-D DEBUG
- 这样在项目中就可以使用下面的代码进行添加编译了
1
2
3#if DEBUG
#else
#endif
附上我使用的自定义函数供大家参考:先按照上述步骤添加-D DEBUG,然后是定义一个全局函数HJLog
1 | //Swift2.2后使用#line #file #function #column替换__LINE__等 |
效果图:
当切换到Release版本下,HJLog就不再会打印了.一劳永逸~~
2. 在Swift中获取实例的类型,除了使用Objective-C中的方法,还可以使用方法1:使用类名.self
方法2:使用类名.classForCoder(),只要是NSObject子类都可以使用
方法3:使用实例.classForCoder, 只要是NSObject对象都可以使用
方法4:使用实例.dynamicType, 但是在Swift中dynamicType是一个关键字
1 | HJLog(HJTabBarController.self) //方法1:使用类名.self |
效果图:
3. Swift闭包中解决循环引用问题方法1:使用OC类似的方法 weak var weakself = self
方法2:使用unowned,此时对象不能为nil
方法3:使用weak,此时对象可以为nil
使用方法2和方法3的时候,在闭包的参数列表前面使用[unowned self, weak button],多个对象使用逗号,隔开
1 | window?.rootViewController = HJGuideController(closure: {[unowned self, weak window] () -> Void in |