Swift动态类型Debug / Release

时间:2017-03-13 11:36:42

标签: ios swift compiler-optimization

我是这段代码:

class NotificationsController: NSObject {

    static var classNotifier: AnyClass {
        if #available(iOS 10, *) {
            return UNUserNotificationCenter.classForCoder()
        } else {
            return UILocalNotification.classForCoder()
        }
    }

    static func foo() {
        NotificationsController.classNotifier.foo()
    }

}

其中:

protocol Notificable: class {
   static func foo()
}

extension UNUserNotificationCenter: Notificable {

   static func foo() {
      // do something
   }

}

extension UILocalNotification: Notificable {

   static func foo() {
      // do something
   }

}

在调试模式下构建工作正常 当我构建Release模式(用于存档)时,编译器说AnyClass没有一个名为" foo"的函数。

现在,我知道如果我删除版本优化构建工作,但我认为这将是错误的解决方案。

其他解决方案?

1 个答案:

答案 0 :(得分:0)

一段时间后,我会对代码进行调查并重写您的解决方案。问题与protocol Notificable和实例函数func foo()有关。

您尝试将此函数称为类函数而不是实例1,并且存在问题。

工作解决方案的示例。

protocol Notificable: class {
     static func foo()
}

extension UNUserNotificationCenter: Notificable {
    internal static func foo() {

    }
}

extension UILocalNotification: Notificable {
    internal static func foo() {

    }
}

class NotificationsController: NSObject {

    static var classNotifier: AnyClass {
        if #available(iOS 10, *) {
            return UNUserNotificationCenter.classForCoder()
        } else {
            return UILocalNotification.classForCoder()
        }
    }

    static func foo() {
        classNotifier.foo()
    }

}