2017-03-02 71 views
1

中定義的內部類的變量名我有這兩個類:要知道在外部類

class User:Obj 
{ 
    var firstBook:Book? 
    var secondBook:Book? 
} 

class Book:Obj 
{ 
    func getMyName() -> String 
    { 
     // Something need to do here 
     // return name 
    } 
} 

let user = User() 

let book_1 = Book() 
user.firstBook = book_1 

let book_2 = Book() 
user.secondBook = book_2 

print(book_2.getMyName()) //Expected: secondBook 
print(book_1.getMyName()) //Expected: firstBook 

正如你明白,我需要得到父類的變量名。 將是巨大的,如果將有可能同時得到父母class.Type

+1

爲什麼你需要這樣做呢? – Hamish

+0

假設firstBook和secondBook是本地數據庫中的單獨表格,我需要從Book對象 –

回答

2

你可以得到它用反射來實現類似的東西。您需要知道書對象內的用戶對象,所以我添加了一個父變量。它需要很弱,以避免保留週期。

class User: Obj { 

    var firstBook: Book? { 
     didSet { 
      firstBook?.parent = self 
     } 
    } 

    var secondBook: Book? { 
     didSet { 
      secondBook?.parent = self 
     } 
    } 

} 

class Book: Obj { 

    weak var parent: Obj! 

    func getMyName() -> String { 
     let mirror = Mirror(reflecting: parent) 
     let variableName = mirror.children.filter { $0.value as? Book === self }.first?.label 
     return variableName! 
    } 

} 
+0

這可能是一個解決方案,但我不能通過自己定義這樣的變量時: var firstBook = Book(self) –

+0

instead,我可以這樣做:var firstBook = Book(User.self), if you can achieve相同的結果,這將是偉大的。 –

+1

我編輯了我的答案,使其更清楚你將如何使用它。 – dostu

1

可以在書類中創建屬性作爲名稱,並設置名稱屬性firstBook和secondBook並通過檢索name屬性

+0

中獲取它們不是這種方式。沒有設置屬性。 –