2021 swfit 重拾之路

ADAlertController-swift code rew

2021-07-14  本文已影响0人  大也

1.枚举

-enum ADAlertTransitionStyle: Int {
-    // presenting 转场类型
-    case ADAlertTransitionStylePresenting = 0
-    // dismiss 转场类型
-    case ADAlertTransitionStyleDismissing = 1
- }
+/**
+ 1.swift的枚举,不用写一长串的前缀,
+ 2.没什么特殊的意义,可以不必指定枚举必须为什么类型
+ 3.用三个斜杠,可以变成文档注释,
+ */
+
+/// 转场动画类型
+enum ADAlertTransitionStyle {
+    /// presenting 转场类型
+    case presenting
+    /// dismiss 转场类型
+    case dismissing
+ }

2.block命名 按功能命名

-typealias ADAlertDidDismissBlock = (_ alertController: ADAlertController) -> Void
+typealias AlertControllerDidDismissAction = (_ alertController: ADAlertController) -> Void

3.泛型简写初始化规则

    // ADAlertAction 按钮
-    private var buttons: Array<UIView> = Array()
+    private var buttons: [UIView] = []

4.as!的替代方法

//1.
    var alertPriority: ADAlertPriority {
        get {
-            return objc_getAssociatedObject(self, &AssociatedKeys.alertPriority) as! ADAlertPriority
+            let rawValue = objc_getAssociatedObject(self, &AssociatedKeys.alertPriority) as? Int
+            return ADAlertPriority(rawValue: rawValue ?? 0) ?? .ADAlertPriorityDefault
        }
        set {
-            objc_setAssociatedObject(self, &AssociatedKeys.alertPriority, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+            objc_setAssociatedObject(self, &AssociatedKeys.alertPriority, newValue.rawValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
//2.
-            let viewController :ADAlertController = toViewController as! ADAlertController

+            if let viewController = toViewController as? ADAlertController {
}
  1. fileprivate
fileprivate extension ADAlertControllerConfiguration {
   var mainView: ADAlertControllerViewProtocol {
       switch self.preferredStyle {
       case .alert:
           return ADAlertView(configuration: self)
       case .actionSheet, .sheet:
           return ADActionSheetView(configuration: self)
       }
   }
}

https://www.cnblogs.com/1-434/p/10515908.html

  1. guard
    func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
-        
-        if self.configuration!.preferredStyle == ADAlertControllerStyle.ADAlertControllerStyleAlert {
-            
-            let transition: ADAlertViewAlertStyleTransition = ADAlertViewAlertStyleTransition()
-            
-            transition.transitionStyle = ADAlertTransitionStyle.ADAlertTransitionStylePresenting
-            
-            return transition
-        } else if self.configuration!.preferredStyle == ADAlertControllerStyle.ADAlertControllerStyleSheet {
-            
-            let transition: ADAlertViewSheetStyleTransition = ADAlertViewSheetStyleTransition()
-            
-            transition.transitionStyle = ADAlertTransitionStyle.ADAlertTransitionStylePresenting
-            
-            return transition
-        } else
-//        if self.configuration!.preferredStyle == ADAlertControllerStyle.ADAlertControllerStyleSheet
-        {
-            let transition: ADAlertViewSheetStyleTransition = ADAlertViewSheetStyleTransition()
-            
-            transition.transitionStyle = ADAlertTransitionStyle.ADAlertTransitionStylePresenting
-            
-            return transition
+        guard let style = self.configuration?.preferredStyle else { return nil }
+        switch style {
+        case .alert:
+            return AlertViewStyleTransition(.presenting)
+        case .actionSheet, .sheet:
+            return ActionSheetStyleTransition(.presenting)
        }
-        
    }

https://www.jianshu.com/p/3a8e45af7fdd

/**
1.并不是所有类,都需要继承自NSObject,只有需要跟objc交互时,或者用到objc的相关方法,
比如这里UIViewControllerAnimatedTransitioning协议就要求是NSObject的子类才能遵循
2.对于不变的变量,可以考虑用let,并增加初始化方法
3.访问权限默认是internal,可以不写
*/

上一篇 下一篇

猜你喜欢

热点阅读