2014-06-27 211 views
19

是否有與Objective-C的@encode相同的Swift?相當於@encode

例如

@encode(void *) // -> @"^v" 

搜索得到什麼。

+1

鑑於我們[甚至不能使用自省來確定對象的類型](http://stackoverflow.com/questions/24101450/how-do-you-find-out-the-type-of-一個對象在迅速),我懷疑有一個迅速的等效 - 雖然主演,因爲如果你找到一個解決方案,這將提供至少在我的內省問題的起點;) – Jiaaro

+1

爲什麼你需要這個?你能解釋一下上下文嗎?對於你想要做的事情,可能有一個很好的Swift替代方案。 –

+0

@ St3fan無論如何,我認爲這是一個很好的問題,但是對於上下文來說,參見。第一個代碼塊在[這個SO回答](http://stackoverflow.com/a/24456115/45813) –

回答

4

不,沒有 - 因爲在引擎蓋下Swift類不使用Objective-C內省來完成他們的工作。沒有必要爲了傳遞/調用數據而計算它(就像Objective-C中的那樣)。但是,如果您需要在運行時動態使用它(例如,爲了與現有的Objective-C方法進行互操作),那麼您可以創建一個Objective-C調用並通過或傳遞對象(對於簡單類型)寫一個查找表。

類型編碼在https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html上列出,它們具有映射,並且可以編寫查找的開關類型語句。

但從根本上講,如果你有,你要在傳遞和發現它是Objective C的編碼類型,您可以使用NSObject的的objCType方法的類型:

var i = 1 as NSNumber 
String.fromCString(i.objCType)! == "q" 

如果需要通過傳遞它作爲一個不受干擾C字符串,你可能甚至不需要將它轉換回Swift字符串類型。

+3

'objCType'是'NSValue'的方法,而不是'NSObject'。 –