我正在开发一个HTML5展示应用程序,我需要发现我的Swift协议中的所有方法。所有协议都扩展了基础协议。
该应用程序是用于测试此方法的HTML5展示。该应用程序调用该方法并给出响应。
我找到了一些特定协议的信息,但我需要发现我的应用程序中的所有协议,然后发现有关此方法的所有信息(名称,参数名称参数类型和返回值)。
@objc protocol Protocol {
func method1()
func method2() -> Bool
func method3(param1:Int) -> Bool
func method4(param1:Int, param2:Int, param3:Int) -> Bool
}
var numMethods:UInt32 = 0
var methods:UnsafeMutablePointer<objc_method_description> = protocol_copyMethodDescriptionList(Protocol.self, true, true, &numMethods)
for var iuint:CUnsignedInt = 0; iuint < numMethods; iuint++ {
var i:Int = Int(iuint)
var method:objc_method_description = methods[i]
println("Method #\(i): \(method.name)")
}
我正在使用Objective-C运行时参考
有关如何在swift中执行此操作的任何想法?
答案 0 :(得分:1)
你想得到:
然后在objective-c(当然使用桥接文件)中,将方法实现(即IMP)转换为函数指针。然后使用
调用objective-c中的函数指针以及您可能拥有的任何参数
id (*func)(id, SEL, id) = (void *)imp;
return func(target, selector, param);`
看看他在博客文章中如何调用init方法,这也应该有所帮助。 http://ijoshsmith.com/2014/06/05/instantiating-classes-by-name-in-swift/
答案 1 :(得分:0)