2014-10-09 118 views
2

我正在开发一个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运行时参考

任何想法如何做到这一点的迅速?

回答

0
+0

感谢您的文档。我以前阅读过所有这些帖子。但在这一个http://stackoverflow.com/a/24072677/2248121说,这是使用的Objective-C运行时参考的方法可能的查询,这是exaclly我在做什么。我在问一个人是否有完整的例子来获取方法的所有信息。 – ikocel1 2014-10-09 11:44:26

1

你会希望得到:

  1. 所述方法实现(method_getImplementationhttps://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html#//apple_ref/c/func/method_getImplementation
  2. 并且所述方法选择器(method_getNamehttps://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html#//apple_ref/c/func/method_getName

然后,在目标c(当然使用桥接文件),流延方法实施(即IMP)作为函数指针。然后用

  1. 目标
  2. 选择
  3. 和任何参数调用函数指针在Objective-C,你可能有

    ​​

看看如何在此博客他称之为init方法,这也应该有所帮助。 http://ijoshsmith.com/2014/06/05/instantiating-classes-by-name-in-swift/