2017-04-03 116 views
-5

我創建了一個自定義類,我想添加關聯的獲取者和設置者。我已經閱讀了Apple的官方documentation,並注意到在設置getter和setter時,實際上會創建一個單獨的變量,這看起來很混亂。例如,在上面鏈接的文檔中,getters和setter被應用於一個名爲perimeter的新變量,以從另一個稱爲sidelength的變量獲取值。下面是我的代碼:無法在Swift中設置獲取者和設置者

enter image description here

+3

鑑於你試圖執行setter和getter,他們沒有任何意義。只需使用'var key:String?'就是這樣。 – rmaddy

+0

你是什麼意思?我想從本質上設置一個關鍵值,然後再獲取它,以便我可以將它傳遞給我知道的新的ViewController – tccpg288

+4

。這就是'var key:String?'做的。你不需要實現你自己的setter和getter。它們會自動爲每個屬性創建。只能使用自己的setter和/或getter來使其成爲一個計算屬性。你應該閱讀Swift書中的那一章。 – rmaddy

回答

0

getter和你一樣正在實現他們制定者僅用於在斯威夫特計算變量。帶有getter和setter的變量實際上並不存儲任何內容,但是在爲其值賦予值或與其他變量一起使用時會執行某些操作。適當使用時,使用情況會更像這樣。

var _key: String? 

var key: String? { 
    get { 
     return _key 
    } 
    set { 
     _key = newValue 
    } 
} 

你會很少,如果使用上相同的數據類型,雖然。我經常使用這些與CoreData進行通信,並將日期設置爲字符串或返回日期。有時候我可能會用它來處理可選的變化,而不是可選的。

雖然使用Swift中的變量不需要Getters和setters。如果你習慣於用他們的語言,我可以理解這裏的困惑,但忘記了相關性,並重新考慮你如何看待它。我相信在短時間之後,您會喜歡Swift使用其數據類型的方式!

編輯:

爲了做到你想要什麼,你需要的是這樣的:

class PollCell: UICollectionViewCell { 
    var key: String? 
} 

現在,您可以指定要cell.key任何價值和檢索你cell.key想要的任何值。

+1

這個答案會更清晰(特別是對一個Swift新手),通過開始顯示你在這種情況下甚至不需要自定義setter和getter。 – rmaddy

+0

我同意,但如果他實際上讀取我寫的內容而不立即複製並粘貼我的回覆,他應該明白。 – Sethmr

+1

也許,但你應該帶領最好的解決方案,並按照其他信息。 – rmaddy