Reflection with Swift - 获取类的函数名称[重复]

2024-01-11

我想知道是否有办法获得一些有用的班级构成信息。例如,我发现能够访问类的所有可用函数非常有用。看来MyrrorType但这不是我要找的:/ 我知道我可以使用获取函数名称__FUNCTION__但这并不正是我所需要的。 我需要的是可用于班级的所有功能的完整列表。 有什么有用的提示吗?


与 Objective-C 中可用的黑客技术相比,Swift 中的反射非常有限。话虽如此,Objective-C 运行时函数在 Swift 中仍然可用。你可以通过让你的类继承自NSObject:

class MyClass: NSObject {
    func f1() {}
    func f2() {}
    func f3() {}
}

let myClass = MyClass.self

var methodCount: UInt32 = 0
let methodList = class_copyMethodList(myClass, &methodCount)

for i in 0..<Int(methodCount) {
    let selName = sel_getName(method_getName(methodList[i]))
    let methodName = String(CString: selName, encoding: NSUTF8StringEncoding)!
    print(methodName)
}

这将为您提供 4 种方法:f1 ... f3 and init.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Reflection with Swift - 获取类的函数名称[重复] 的相关文章

随机推荐

  • 获取 Subclipse 中的当前修订号?

    虽然我通常使用 SVN 的 Subversive 插件 Eclipse 但我决定尝试 Subclipse 它似乎更流行且文档更好 我认为 Subversive 理所当然的一点是当前显示的修订号 对于 Subversive 这在菜单旁边显示得
  • 如何判断列表中是否有第三项?

    我有一个函数 它接受一个包含两个或三个元素的列表 expecting either a b c d or a b c d e define has third item ls if null caddr ls false true 但是这段
  • 我可以在Python中使用变量名“type”作为函数参数吗?

    我可以用吗type作为 python 函数参数的名称 def fun name type 你可以 但你不应该 使用内置函数的名称不是一个好习惯 因为它们会覆盖该范围内的内置函数的名称 如果您必须使用该词 请根据给定的上下文稍微修改它 虽然对
  • Spring Web 服务动态 wsdl 不为模式元素生成消息

    我有以下架构
  • Spring Boot 和 Spring Security 多个登录页面

    EnableWebSecurity public class MultiHttpSecurityConfig Configuration Order 1 public static class App1ConfigurationAdapte
  • 如何从 PhoneGapcamera.getPicture 获取 File 对象?

    这可能很简单 并且由 PhoneGap 的 相机 插件 文件 插件或 文件传输 插件中的某些功能组合涵盖 我了解用户可以选择一个文件 navigator camera getPicture function fileURI need hel
  • 使用 CONTAINS 的 SharePoint 列表 CAML 查询

    我尝试在 Web 部件中使用以下 CAML 查询来查询 SharePoint 列表 我已经在 U2U CAML 查询生成器和 Stramit CAML 查看器中测试了该查询 它工作正常 仅返回匹配的记录 但是当我在 Web 部件中使用它时
  • 如何让站点地图生成器完全抓取 SPA 的 Angular 路由器?

    我正在尝试为我的网页生成站点地图 在线站点地图生成器仅向我显示 xml 文件上的主页
  • Yesod/持久的 MongoDB 示例

    Haskell 和 Yesod 是新手 我一直在尝试遵循 Yesod 书 http www yesodweb com book persistent 中持久性章节中的与 Yesod 集成示例 Sqlite 编译并运行得很好 但是 我正在尝试
  • Safari 无法下载存折文件 .pkpass

    我在网页上有一个链接 用户可以通过该链接下载存折文件 但是当在 iPhone 上的 Safari 中单击该链接时 我收到以下错误消息 Safari cannot download this file 我在这里读过类似的问答 并且 MIME
  • 使用 Delphi 调用 Http POST url 最简单的方法是什么?

    受到问题的启发使用 Delphi 调用 Http GET url 最简单的方法是什么 https stackoverflow com questions 301546 whats the simplest way to call http
  • 我应该如何处理 wiki 页面内容中的自动链接?

    我所说的自动链接是指将页面内容中内嵌的 wiki 链接生成为页面超链接 如果存在 或创建链接 如果页面不存在 的过程 对于我正在使用的解析器 这是一个两步过程 首先 解析页面内容并从源标记中提取到 wiki 页面的所有链接 然后 在生成最终
  • 在闭包作用域中设置变量

    我想我明白为什么变量存在于声明它们的函数之外 因为您要返回另一个函数 myFunction function var closure closure scope return function return closure A myFunc
  • 当我按下后退按钮时,活动会发生什么?

    当我在活动 A 此处 LoginActivity 上并使用 Intent 转到活动 B 此处 MainActivity 并调用 finish 函数时 在意图函数之后 例子 if isloggedIn val intent Intent th
  • 收到错误“要替换的项目数不是替换长度的倍数”

    我正在尝试使用以下命令将记录转换为日期和时间格式strptime功能 但是 我不确定为什么会收到错误 要替换的项目数量不是替换长度的倍数 我尝试使用以下命令检查记录的长度length函数 但两者具有相同的长度 data lt DT head
  • Elasticsearch更新索引模板

    我有一个关于elasticsearch索引模板的问题 有一个我的问题的场景 为一系列索引创建一个模板 名为templateA 并且有一些从此模板创建的索引 名为Index yyyy mm dd2 and Index yyyy mm dd2
  • 在 C# XML 文档中,只有摘要标记有效

    我正在尝试为我的 VS 代码作业添加 XML 文档 但当将鼠标悬停在函数 变量上时 仅显示摘要块中的文本 它也发生在普通的 Visual Studio 和多 台计算机上 所以我认为这只是我不明白的事情 但我尝试用谷歌搜索它并没有得到任何结果
  • Go 中的构造函数

    我有一个结构 我希望用一些合理的默认值来初始化它 通常 这里要做的是使用构造函数 但由于 Go 并不是传统意义上的真正的 OOP 因此它们不是真正的对象 并且它没有构造函数 我注意到了 init 方法 但那是在包级别 还有其他类似的东西可以
  • db2 类型 4 驱动程序下载

    我想使用 java 应用程序连接到 Db2 数据库服务器 我使用 type4 驱动程序 您能告诉我下载 DB2 Type4 驱动程序的确切位置吗 提前谢谢 实际上推荐的方法是从您正在使用的 DB2 服务器获取它 因为它保证您获得它们的正确版
  • Reflection with Swift - 获取类的函数名称[重复]

    这个问题在这里已经有答案了 我想知道是否有办法获得一些有用的班级构成信息 例如 我发现能够访问类的所有可用函数非常有用 看来MyrrorType但这不是我要找的 我知道我可以使用获取函数名称 FUNCTION 但这并不正是我所需要的 我需要