斯威夫特发现协议方法
问题描述:
我正在开发一个HTML5展示应用程序,我需要去发现我的雨燕协议中的所有方法。所有协议都从基础协议扩展而来。斯威夫特发现协议方法
应用程序是一个展示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运行时参考
任何想法如何做到这一点的迅速?
答
你会希望得到:
- 所述方法实现(method_getImplementation)https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html#//apple_ref/c/func/method_getImplementation
- 并且所述方法选择器(method_getName)https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html#//apple_ref/c/func/method_getName
然后,在目标c(当然使用桥接文件),流延方法实施(即IMP)作为函数指针。然后用
- 目标
- 选择
-
和任何参数调用函数指针在Objective-C,你可能有
看看如何在此博客他称之为init方法,这也应该有所帮助。 http://ijoshsmith.com/2014/06/05/instantiating-classes-by-name-in-swift/
感谢您的文档。我以前阅读过所有这些帖子。但在这一个http://*.com/a/24072677/2248121说,这是使用的Objective-C运行时参考的方法可能的查询,这是exaclly我在做什么。我在问一个人是否有完整的例子来获取方法的所有信息。 – ikocel1 2014-10-09 11:44:26