Swift4.0判断本函数是否在其它类有相同的方法

简介: Swift4.0判断本函数是否在其它类有相同的方法

组件化开发模式化,为了减少AppDelegate.m做很多事情会做几个组件来分担它的功能,因此他们的函数名相同。

Object C判断本函数是否在其它类有相同的方法很简单,通过_cmd就能很快判断出来:([module respondsToSelector:_cmd])。

而Swift4.0判断本函数是否在其它类有相同的方法就没有那么幸运了。

使用if((module as AnyObject).responds(to:"_cmd"))语法不报错,但是永远为false,因为Swift4.0没有_cmd,代替的是#function,但是你使用if((module as AnyObject).responds(to:#function))也是永远为false。

Swift4.0判断本函数是否在其它类有相同的方法是:if (module as AnyObject).self.responds(to:#selector(UIApplicationDelegate.application(_:didFinishLaunchingWithOptions:))),使用if (module as AnyObject).self.responds(to:Selector(("_:didRegisterForRemoteNotificationsWithDeviceToken:")))或也会为false,这个是我不断试错3个小时才试出来的。它没有Object那样一个_cmd可以代表本函数名,需要你实际写上它的完整函数名才行。

Object C代码:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSArray *modules = [[BITModuleManager sharedInstance] allModules];
    for (id<ModuleProtocol> module in modules) {
        if ([module respondsToSelector:_cmd]) {
            [module application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
        }
    }
}

Swift4.0代码:

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
    {
        let moduleManager = BITModuleManager.sharedInstance()
        guard let modules = moduleManager?.allModules() else { return };
        for module in modules
        {
//            if((module as AnyObject).responds(to:#function))
            if (module as AnyObject).self.responds(to:#selector(UIApplicationDelegate.application(_:didRegisterForRemoteNotificationsWithDeviceToken:)))
            {
                (module as AnyObject).application(application, didRegisterForRemoteNotificationsWithDeviceToken:deviceToken)

            }
        }
    }
目录
相关文章
|
4天前
|
Swift 索引 容器
Swift 泛型-关联类
Swift 泛型-关联类
10 1
|
9天前
|
Swift iOS开发
Swift 方法
10月更文挑战第29天
15 4
|
11天前
|
安全 编译器 Swift
Swift 函数
10月更文挑战第27天
12 1
|
21天前
|
Swift
Swift 中 struct(结构体)和 class(类)的区别
【10月更文挑战第10天】理解 struct 和 class 的区别对于正确使用 Swift 语言进行编程非常重要。在实际开发中,需要根据具体的需求和场景来选择合适的数据类型,以充分发挥它们的优势,提高代码的质量和效率。
|
9天前
|
存储 Swift iOS开发
Swift 类
10月更文挑战第29天
11 0
|
4月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
71 7
|
5月前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
105 5
Swift开发——简单函数实例
|
6月前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
48 0
|
6月前
|
安全 Swift 开发者
【Swift开发专栏】Swift类的继承与多态
【4月更文挑战第30天】Swift中的OOP聚焦于类继承与多态,提供代码复用和类型安全。继承通过`class`和冒号实现,子类继承父类属性和方法,支持单继承以降低复杂性。多态借助协议和类型兼容实现,允许统一处理不同类型的对象。继承用于构建复杂类,多态则使代码更通用、可扩展。理解并运用这些概念对Swift开发者至关重要。
56 0
|
6月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
125 1