当前位置: 首页 > 编程笔记 >

SwiftSwift Swizzling的基础

东郭存
2023-03-14
本文向大家介绍SwiftSwift Swizzling的基础,包括了SwiftSwift Swizzling的基础的使用技巧和注意事项,需要的朋友参考一下

示例

让我们交换的实现methodOne(),并methodTwo()在我们的TestSwizzling类:

class TestSwizzling : NSObject {
    dynamic func methodOne()->Int{
        return 1
    }
}

extension TestSwizzling {
    
    //在Objective-C中,您需要在load()中执行扫描, 
    //但是Swift中不允许使用此方法
    override class func initialize()
    {

        struct Inner {
            static let i: () = {

                let originalSelector = #selector(TestSwizzling.methodOne)
                let swizzledSelector = #selector(TestSwizzling.methodTwo)                 
                let originalMethod = class_getInstanceMethod(TestSwizzling.self, originalSelector);
                let swizzledMethod = class_getInstanceMethod(TestSwizzling.self, swizzledSelector)                
                method_exchangeImplementations(originalMethod, swizzledMethod)
            }
        }
        let _ = Inner.i
    }
    
    func methodTwo()->Int{
        // 混乱后不再是递归调用
        return methodTwo()+1
    }
}

var c = TestSwizzling()
print(c.methodOne())
print(c.methodTwo())
           

 类似资料:
  • 3.1 基本的build文件 最基本的Java工程,其 build.gradle 非常简单: apply plugin: 'java' 这里应用了Gradle提供的Java插件。该插件提供了构建和测试Java应用所需的一些东西。 一个最基本的Android工程的build.gradle如下: buildscript { repositories { mavenCentral

  • Android plugin 提供了大量 DSL 用于直接从构建系统定制大部分功能。

  • 一、图的基本概念 1. 图的定义 定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。 2. 图的种类 根据边是否有方向,将图可以划分为:无向图和有向图。 2.1 无向图 上面的图G0是无向图,无向图的所有的边都是不区分方向的。G0=(V1,

  • 一、树的介绍 1.树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。 把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: (01) 每个节点有零个或多个子节点; (02) 没有父节点的节点称为根节点; (03) 每一个非根节点有且只有一个父节点; (04) 除了根节点外,每个子节点可以分为多个不相交的子树。 2.树的基

  • 目标:构建基于 Maven 和 Tomcat 的基础镜像 本项目代码维护在 DaoCloud/docker-demo-build-base-image 项目中。 您可以在 GitHub 找到本项目并获取本文中所提到的所有代码文件。 前言 在 Java 开发的世界中,有很大一部分应用是基于 Maven 构建的,而最终的交付结果也是一个 war 包,所以,构建一个基于 Maven 和 Tomcat 的

  • 问题内容: “编写一个递归函数“ listSum”,该函数接受一个整数列表并返回列表中所有整数的和。” 例: 我知道如何以其他方式执行此操作,但不是以递归方式执行。 我需要执行此操作的基本方法,因为不允许使用特殊的内置函数。 问题答案: 每当遇到这样的问题时,请尝试使用相同的函数表示该函数的结果。 在你的情况下,你可以通过将第一个数字与在列表中其余元素上调用同一函数的结果相加来获得结果。 例如,