Swift:帶有私有設置方法的公有屬性

作者:Thomas Hanning胡陪,原文鏈接坷虑,原文日期:2015-12-24
譯者:小袋子秀姐;校對:lfb_CD;定稿:Cee

Swift 可以很方便地創(chuàng)建帶有私有設置方法的公有屬性擂找。這可以讓你的代碼更加安全和簡潔戳吝。

封裝

封裝從根本上意味著類的信息和狀態(tài)應該對外部類隱藏,只有類自身可以操作贯涎。因此听哭,所有的 bug 和 邏輯錯誤更加不可能發(fā)生了。

通常你會使用 setter 以及 getter 來達到封裝的目的柬采。然而欢唾,有時候你根本不想對外提供類中的設置方法。對于這樣的情況粉捻,你可以使用帶有私有設置方法的屬性礁遣。

例子

假設我們想要創(chuàng)建一個代表圓的類,那么圓的半徑應該是可以改變的肩刃。而且祟霍,該圓的面積和直徑應該可以從圓的實例中獲取杏头,而這兩個屬性不應該被類本身以外所更改。出于性能考慮沸呐,面積和直徑也應該只計算一次醇王。

所以這個圓類應該是這樣的:

class Circle {

    private var area: Double = 0
    private var diameter: Double = 0

    var radius: Double {
        didSet {
            calculateFigures()
        }
    }

    init(radius:Double) {
        self.radius = radius
        calculateFigures()
    }

    private func calculateFigures() {
        area = M_PI * radius * radius
        diameter = 2 * M_PI * radius
    }

    func getArea() -> Double {
        return area
    }

    func getDiameter() -> Double {
        return diameter
    } 
}

現(xiàn)在所有的需求都滿足啦。然而崭添,Swift 提供了一種更好的方式寓娩,可以使得這段代碼更加簡潔。

帶有私有設置方法的屬性

通過在屬性前面使用 private(set) 呼渣,屬性就被設置為默認訪問等級的 getter 方法棘伴,但是 setter 方法是私有的。所以我們可以去掉兩個 getter 方法:

class Circle {

    private(set) var area: Double = 0
    private(set) var diameter: Double = 0

    var radius: Double {
        didSet {
            calculateFigures()
        }
    }

    init(radius:Double) {
        self.radius = radius
        calculateFigures()
    }

    private func calculateFigures() {
        area = M_PI * radius * radius
        diameter = 2 * M_PI * radius
    }
}

當然也可以為屬性設置公有的 getter 方法:

public class Circle {

    public private(set) var area: Double = 0
    public private(set) var diameter: Double = 0

    public var radius: Double {
        didSet {
            calculateFigures()
        }
    }

    public init(radius:Double) {
        self.radius = radius
        calculateFigures()
    }

    private func calculateFigures() {
        area = M_PI * radius * radius
        diameter = 2 * M_PI * radius
    }
}

對象

在這個例子中屁置,屬性只是 Double 值焊夸。然而,如果是一個對象蓝角,可以通過使用對象的某個方法來操作阱穗!使用私有設置方法只允許設置一個全新的對象,在使用過程中應銘記這一點使鹅。

本文由 SwiftGG 翻譯組翻譯揪阶,已經(jīng)獲得作者翻譯授權(quán),最新文章請訪問 http://swift.gg并徘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鄙信,一起剝皮案震驚了整個濱河市位谋,隨后出現(xiàn)的幾起案子负饲,更是在濱河造成了極大的恐慌矮烹,老刑警劉巖洲炊,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腋逆,死亡現(xiàn)場離奇詭異岳锁,居然都是意外死亡圆米,警方通過查閱死者的電腦和手機蒋畜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門声畏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姻成,你說我怎么就攤上這事插龄。” “怎么了科展?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵均牢,是天一觀的道長。 經(jīng)常有香客問我才睹,道長徘跪,這世上最難降的妖魔是什么甘邀? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮垮庐,結(jié)果婚禮上松邪,老公的妹妹穿的比我還像新娘。我一直安慰自己哨查,他們只是感情好逗抑,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寒亥,像睡著了一般邮府。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上护盈,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天挟纱,我揣著相機與錄音,去河邊找鬼腐宋。 笑死紊服,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的胸竞。 我是一名探鬼主播欺嗤,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卫枝!你這毒婦竟也來了煎饼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤校赤,失蹤者是張志新(化名)和其女友劉穎吆玖,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體马篮,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡沾乘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浑测。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翅阵。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迁央,靈堂內(nèi)的尸體忽然破棺而出掷匠,到底是詐尸還是另有隱情,我是刑警寧澤岖圈,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布讹语,位于F島的核電站,受9級特大地震影響幅狮,放射性物質(zhì)發(fā)生泄漏募强。R本人自食惡果不足惜株灸,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擎值。 院中可真熱鬧慌烧,春花似錦、人聲如沸鸠儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽进每。三九已至汹粤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間田晚,已是汗流浹背嘱兼。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贤徒,地道東北人芹壕。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像接奈,于是被迫代替她去往敵國和親踢涌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 昨晚下了一整夜的雨潘明,今早起來,太陽已笑著向我揮手秕噪。雖然地面還是濕答答钉疫,太陽依舊不會吝嗇地告訴我們,新的一天已...
    初見_美丑閱讀 458評論 0 0
  • 我站在清冷的橋上 想起了遠方的你 電話巢价,短信,微信只會勾起思念 想給你一聲問候 以什么名義固阁? 愛的誓言嗎壤躲? 愛是不...
    陽明聊文化閱讀 211評論 0 0