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 {
}
- 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
- 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,可以不写
*/