使用扩展功能的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开发人员 。 您可以在这里了解更多关于他的信息

 如果您喜欢这个,请继续推荐。  🤘