2014-10-09 113 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/