使用扩展功能的iOS开发改进/技巧
我列出了一些小改进/窍门,可以在您的开发周期中为您提供帮助。 请随意提出您的方式,我很乐意将它们添加到此列表中。
用前缀名称的捆绑名称命名您的通知。 它始终可以帮助您避免以后出现任何名称冲突:
枚举通知{ 静态让NotificationOne =“ com.myapp”。 +“ NotificationOne” 静态让NotificationTwo =“ com.myapp”。 +“ NotificationTwo” 静态让NotificationThree =“ com.myapp”。 +“ NotificationThree” 静态让NotificationFour =“ com.myapp”。 +“通知四” }
在UIViewController和UIStoryboard扩展中添加方法以轻松访问和启动VC:
不要忘记在Storyboards的视图控制器中添加标识符。
扩展UIViewController { 静态函数onboardingVC()-> OnboardingVC { 让标识符=字符串(描述:OnboardingVC.self) 返回UIStoryboard.onboarding()。instantiateViewController( withIdentifier:标识符)为! 入门VC } }扩展UIStoryboard { 静态功能onboarding()-> UIStoryboard { 返回UIStoryboard(名称:“ Onboarding”,包:无) } } let onboardingController = UIViewController.onboardingVC()
添加方法以在两种颜色之间进行动画处理时计算中间颜色。 用例:如果用户将手指张开,并且您想根据其跨度位置为颜色设置动画。
(可以在该库中找到toRGBAComponents()
和toHSLAComponents()
方法,您可以编写自己的方法)
扩展UIColor { class func中间体Color(分数:CGFloat, initialColor:UIColor, finalColor:UIColor)-> UIColor {让initialRGBA = initialColor.toRGBAComponents() 让finalRGBA = finalColor.toRGBAComponents()让redDiff =(finalRGBA.r-initialRGBA.r) 让greenDiff =(finalRGBA.g-initialRGBA.g) 让blueDiff =(finalRGBA.b-initialRGBA.b) 令alphaDiff =(finalRGBA.a-initialRGBA.a)令red =分数* redDiff + initialRGBA.r 设绿色=分数* greenDiff + initialRGBA.g 让蓝色=分数* blueDiff + initialRGBA.b 让alpha =分数* alphaDiff + initialRGBA.a返回UIColor(红色:红色,绿色:绿色,蓝色:蓝色,alpha:alpha) } } //根据位置设置颜色 让fractionMovement = CGFloat(userHandPositionX / finalPositionX)view.backgroundColor = UIColor.intermediateColor( 分数:fractionMovement, initialColor:UIColor.green, finalColor:UIColor.blue)
HSLA的类似功能也可以编写为:
类函数中间体HSLAColor(分数:CGFloat, initialColor:UIColor, finalColor:UIColor)-> UIColor {让initialHSLA = initialColor.toHSLAComponents() 让finalHSLA = finalColor.toHSLAComponents()让hueDiff =(finalHSLA.h-initialHSLA.h) 让饱和度饱和度=(finalHSLA.s-initialHSLA.s) 设luminosityDiff =(finalHSLA.l-initialHSLA.l) 令alphaDiff =(finalHSLA.a-initialHSLA.a)令hue =分数* hueDiff + initialHSLA.h 设饱和度=分数*饱和度差+初始HSLA.s 让亮度=分数*亮度Diff + initialHSLA.l 令alpha =分数* alphaDiff + initialHSLA.a返回UIColor(色调:色相,饱和度:饱和度,亮度: 亮度,alpha:alpha) }
可以用于任何事情:注销确认,网络活动警报,捕获用户上下文对话框等:
扩展UIView { func presentWithForwardAnimation(){ self.alpha = 0 self.transform = CGAffineTransformMakeScale(0.8,0.8) UIView.animateWithDuration(0.3){ self.transform = CGAffineTransformIdentity self.alpha = 1 } } func dismissWithBackwardAnimation(){ self.alpha = 1 UIView.animateWithDuration(0.3,动画:{ self.transform = CGAffineTransformMakeScale(0.8,0.8) self.alpha = 0 }){(已完成)在 self.transform = CGAffineTransformIdentity } } } //调用动画 animateView.presentWithForwardAnimation()
像9月12 日, 1月21 日等:
扩展名NSDate { func daySuffix()->字符串{ 让日历= NSCalendar.currentCalendar() 让dayOfMonth = calendar.component(.Day,fromDate:self) 切换dayOfMonth { 情况1、21、31:返回“ st” 情况2、22:返回“ nd” 情况3、23:返回“ rd” 默认值:返回“ th” } } }
最近在某处看到了这个:
扩展UIAlertController { func addCancelAction(){ 让cancelAction = UIAlertAction(title:“ Cancel”, 样式:.cancel, 处理程序:无) addAction(cancelAction) } }让alertController = UIAlertController(title:“ Alert”, 消息:“这是一个警报”, preferredStyle:.alert) alertController.addCancelAction()
总结:这些小的补充确实可以改善和简化开发。 在我的项目中,我总是随身携带这些物品以及更多物品。 我不喜欢包含完整的Pods以获得此类功能的清单,我仅导入所需的内容。
Tanmay是一位全职自由职业iOS开发人员 。 您可以在这里了解更多关于他的信息
如果您喜欢这个,请继续推荐。 🤘