考慮在C以下代碼:Swift3:(!指針本身是int值,不指向任何地方)原始指針轉換成int
void someFunction (int type, void * someData) {
unsigned value = (int)someData;
}
我知道這個代碼看起來有點奇怪,但是這個功能是一個回調函數,回調函數必須採用void *
參數,因爲實際上someData
實際上是指向某些內存結構的指針(type
會告訴我哪個結構),但在這種情況下不是。在這種情況下,它實際上只是一個無符號的int值;不是指向這樣一個值的指針,而是值本身。來電者真正調用這個函數是這樣的:
unsigned value = ...;
callbackFunction(type, (void *)value);
是啊,這是愚蠢和醜陋,但我沒有寫的代碼,我也無法改變它。我只需要實施回調。我真的很喜歡在Swift(Swift 3)中這麼做。但是在斯威夫特,回調有看起來像這樣:
func someFunction (_ type: Int, _ someData: UnsafeMutableRawPointer?) -> Void
而我的函數被調用就好了......但我怎麼得到的數字的指針值,因爲我需要的無符號整型值,並把它傳遞給另一個功能。
可能重複的:http://stackoverflow.com/questions/40569800/how-to-get-value-of- unsafemutablerawpointer – Fefux
@Fefux如果這真的是另一個問題的重複,那麼在那裏的答案是相當差的,考慮到超級優雅的解決方案MartinR提供;) – Mecki
是的,我發佈這個可能的副本,但我讀的答案,他們不是非常有幫助。 – Fefux