内容简介:最近在学习以下代码主要定义了一个swift工程中的UI部分的常量亮和定义,当然,这只是demo,正式工程可以按照这个思路进行扩展。一个
写在前面
最近在学习 swift ,从github上下载很多demo进行学习,收获不小,发现了一些不错的写法,记录一下方便以后查询,同时分享给大家,共同成长。
UI相关的一些常量和辅助方法
以下代码主要定义了一个swift工程中的UI部分的常量亮和定义,当然,这只是demo,正式工程可以按照这个思路进行扩展。
一个 XYUI
结构体囊括了 Screen
、 Color
、 Font
三个子结构体,分别定义了屏幕、颜色、字体相关的常量和方法,结构清晰,方便后续扩展。
struct XYUI { struct Screen { static let Width : CGFloat = UIScreen.main.bounds.width static let Height : CGFloat = UIScreen.main.bounds.size.height static let NavH : CGFloat = XYUI.Screen.IphoneX == true ? 88 : 64 static let StatusbarH : CGFloat = XYUI.Screen.IphoneX == true ? 44 : 20 static let IphoneX: Bool = Int(XYUI.Screen.Height/XYUI.Screen.Width) == 216 //判断是否是iPhoneX序列 } // 颜色 struct Color { /// 主色调 static let primary = UIColor.hexString(color: "#FFCA07") static let black = UIColor.hexString(color: "#333333") static let white = UIColor.white } struct Font { static func fitFont(size:CGFloat) -> CGFloat { if UIScreen.main.bounds.size.width == 320 { return size * 0.8 } return size } static let f10 = UIFont.systemFont(ofSize: 10) static let f11 = UIFont.systemFont(ofSize: 11) static let f12 = UIFont.systemFont(ofSize: 12) static let f13 = UIFont.systemFont(ofSize: 13) static let f14 = UIFont.systemFont(ofSize: 14) static let f15 = UIFont.systemFont(ofSize: 15) static let f16 = UIFont.systemFont(ofSize: 16) static let f17 = UIFont.systemFont(ofSize: 17) static let f18 = UIFont.systemFont(ofSize: 18) static let f20 = UIFont.systemFont(ofSize: 20) } }
关于cellIdentifier使用
关于 tableview 和 collectionView 的 cellIdentifier 定义,在 objective-c 中,我之前是这样定义的:
static const NSString *kXXXIdentifier = @"XXXIdentifier"; //XXX换成对应cell的类名
后来发现了一个更简便的写法,就是在对应的cell中,定义一个 类方法 ,在类方法中使用反射机制进行类名的获取,从而生成复用标识。代码如下:
+ (NSString *)cellIdentifier{ return NSStringFromClass([self class]); }
这样就不用绞尽脑汁去想复用标识的常量名了,而且更为简洁。
在swift中通常的做法和在 objective-c 中一样,定义一个常量,
static let kXXXIdentifier: String = "XXXIdentifier"; //XXX换成对应cell的类名
更为简洁的写法:
public class func identifier() -> String { let name: AnyClass! = object_getClass(self) return NSStringFromClass(name) }
从代码上看,不管是objective-c还是swift,使用反射获取的cellIdentifier和对应的cell绑定在一起,不仅可以直接进行代码的copy复用,而且免去了在绞尽脑汁想复用标识常量名的麻烦,何乐为不为呢。
根据对应的屏幕尺寸进行缩放
我们开发中进行UI布局的时候,即使采用的是自动布局,一些控件的尺寸、控件间的间距也是应该按照屏幕的大小进行缩放的,这样才能做到标准的UI自适应。以下是以 iPhone6 、 iPhone6s 的屏幕尺寸为基准进行缩放的方法,特别收录一下。
// 宽度比 let kWidthRatio = kScreenW / 375.0 //iPhone6、iPhone6s的宽度为基准 // 高度比 let kHeightRatio = kScreenH / 667.0 //iPhone6、iPhone6s的高度为基准 // 按比例自适应 func Adapt(_ value : CGFloat) -> CGFloat { return AdaptW(value) } // 自适应宽度 func AdaptW(_ value : CGFloat) -> CGFloat { return ceil(value) * kWidthRatio } // 自适应高度 func AdaptH(_ value : CGFloat) -> CGFloat { return ceil(value) * kHeightRatio }
ceil函数从网上查了一下,意思是向上取整。
关于通知
iOS开发中, 通知 也是我们经常使用的 观察者 模式的一种实现。在OC中,我们通常把通知名定义成一个全局的常量,这样方便调用和修改。
在OC中,我们之前是这样做定义的:
NotificationGlobalName.h
extern NSString *const buildRouteNotification; extern NSString *const placeDeletedNotification; extern NSString *const centerPlaceOnMapNotification;
NotificationGlobalName.m
//`XXX`替换成工程名 NSString *const buildRouteNotification = @"XXX.buildRouteNotification"; NSString *const placeDeletedNotification = @"XXX.placeDeletedNotification"; NSString *const centerPlaceOnMapNotification = @"XXX.centerPlaceOnMapNotification";
我们可以在内部使用 #pragma mark -模块名
分模块定义,这样方便后续的更新和查找。
swift中我们可以这样做:
extension Notification.Name { static let buildRoute = Notification.Name("buildRouteNotification") static let placeDeleted = Notification.Name("placeDeletedNotification") static let centerPlaceOnMap = Notification.Name("centerPlaceOnMapNotification") }
利用扩展把通知名定义成常量,方便后续的调用。
以上所述就是小编给大家介绍的《swift开发中那些值得借鉴的写法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Tomcat 架构原理解析到架构设计借鉴
- 七大经典算算法总结(非原创,有很多借鉴)
- 云时代,这些运维实践最有借鉴意义!
- 优化算法从鸟群、鱼群中借鉴了什么 | 算法科普文
- Raft算法及etcd/raft的实现思路借鉴
- 百度持续集成 10 年探索升级最佳实践,值得每个互联网公司参考借鉴!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与算法分析
韦斯 (Mark Allen Weiss) / 陈越 / 机械工业出版社 / 2016-3-1 / 69.00元
本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。本书把算法分析与有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面、缜密严格,并细致讲解精心构造程序的方法。一起来看看 《数据结构与算法分析》 这本书的介绍吧!