美文网首页2021 swfit 重拾之路
ADAlertController-swift code rew

ADAlertController-swift code rew

作者: 大也 | 来源:发表于2021-07-14 16:55 被阅读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,可以不写
    */

    相关文章

      网友评论

        本文标题:ADAlertController-swift code rew

        本文链接:https://www.haomeiwen.com/subject/hzvypltx.html