2015-06-22 32 views
-4

我在斯威夫特是新的,我想,如果有人可以告訴我,我怎麼能寫在Objective-C的下面的代碼片段轉換爲斯威夫特翻譯Objective-C代碼爲斯威夫特

代碼:

id<JavaUtilConcurrentConcurrentNavigableMap> mapVu = mmcache->kvmap_; 

相應的頭:

@interface MemCache : NSObject { 
      JavaUtilConcurrentConcurrentLinkedDeque *kvqueue_; 
} 
+0

這是一些很奇怪的Objective-C;它看起來非常*舊。它從哪裏來的?你可以改變它嗎? – Tommy

+0

我不能改變它,因爲有太多的類,如果我改變一個,我必須改變所有使用改變的類的類 – Sam

+0

所有那些正常的將會是'kvmap'的吸氣劑--Swift可能調用的東西得到地圖而不是直接讀取實例變量的當前方法。您可以保留所有現有代碼的實例變量。按照現代標準,非常非常奇怪的是一個實例變量是這樣暴露的,但是你不需要停止這樣做只是爲了提供一個getter。 – Tommy

回答

2

混亂的位以後:不能從訪問Objective-C類的實例變量在Swift中定期/適當的方式。看看answer by Leo Natan如何解決這個問題。

以前的答案下面基本上集中於該協議,而不是實例變量

在SWIFT你可以有協議的類型:

let mapVu:JavaUtilConcurrentConcurrentNavigableMap = mmcache.kvmap_ 

看到一個工作示例:

protocol JavautilBlaBla { 
} 

class Class1: JavautilBlaBla { 
    override init() { 
    } 
} 

class Class2 { 
    var kvmap_:Class1 

    override init() { 
     kvmap_ = Class1() 
    } 
} 

let mmcache = Class2() 

let mapVu:JavautilBlaBla = mmcache.kvmap_ 
+0

感謝您的答案,但它不是與我做..當我有e寫你的解決方案我得到一個錯誤是:mmcache不包含kvmap_變量,因此當我驗證頭文件相對於類型的對象mmcache我找到了kvmap_禮物。我不知道爲什麼我沒有和我做過 – Sam

+0

@Sam你可以顯示標題嗎? – luk2302

+0

頭文件在目標c上,我在同一個應用程序中同時使用語言目標c和swift,並使用橋接頭文件導入頭文件。這些是標題的內容:,請參閱我更新它們的問題 – Sam

2

當前訪問實例變量的唯一方法是使用valueForKey()

所以,

let mapVu = mmcache.valueForKey("kvmap_") as! JavaUtilConcurrentConcurrentNavigableMap! 
+0

是的,這是工作,但在你發佈這個解決方案之前,我已經寫了一個get函數,這工作太...你的解決方案,我嘗試它另一種情況,我發現它也在工作......謝謝 – Sam