2015-01-12 114 views
0

所以我試圖定義一個swift類,它既可以在swift中使用,也可以在objective-c中使用。定義類時出現奇怪的swift問題(分段11)

當我嘗試這樣

import Foundation 

     @objc class TestClass 
     { 

      private var m_FirstName : String 
      private var m_LastName : String 
      private var m_Id : String 

     init() 
     { 

      m_FirstName = "" 
      m_LastName = "" 
      m_Id = "userIdNotSet-badescuga" 
      } 

     init(firstName:String, lastName:String, id:String) 
      { 
       m_FirstName = firstName 
       m_LastName = lastName 
        m_Id = id 
       } 
     } 

我得到一個奇怪的錯誤:

Command failed due to signal: Segmentation fault: 11

,因爲我沒有在Objective-C一個String類,這是有點理解的。但即使我將所有String類對象更改爲NSString,但我仍然得到相同的錯誤。

我在做什麼錯?用我的Xcode 6.1.1,我也試過它的Xcode 6.2.3 Beta版

UPDATE

我也試圖從NSObject類繼承同樣的結果:我得到了同樣的錯誤

UPDATE 2

我得到錯誤,當我試圖編譯項目。我不以任何方式使用這個類。它僅用於測試目的。

+0

你有沒有'import foundation'在任何地方?另外,如果它不能擊敗你想到的其他目的,請嘗試從NSObject繼承類:'class TestObject:NSObject ...' –

+0

是的,我導入基礎..我也嘗試過從NSObject繼承沒有運氣:我得到相同的錯誤。 – Alex

+0

這不是完整的代碼。顯示你如何使用'TestClass'。 –

回答

0

這可能是由於您的存儲屬性被標記爲私有訪問。 Swift編譯器不會將@objc自動添加到那些標記爲私有(因爲它假定爲內部使用)。

嘗試預先計劃@objc每個私人屬性之前,看看它是如何去。

另外,如果一個類繼承NSObject,則不需要顯式的@objc標籤。

+0

這不是問題。從我所看到的,編譯器真的不喜歡傳遞NSString或String作爲init參數。我通過將參數類型更改爲AnyObject時解決了問題,當我通過它們並將它們轉換爲它們在構造函數中的特定類型..但是很不理想。數據不是類型安全的。@ pie-o-pah – Alex

+0

謝謝你指出。 @BadescuAlexandru – PieOhPah

+0

另外,我看到沒有用「?」聲明變量,在某些情況下會使其崩潰。奇怪的東西..不能等待快速更新。 @ pie-o-pah – Alex