作者:Gabriel Theodoropoulos廊驼,原文鏈接,原文日期:2016-1-11
譯者:saitjr惋砂;校對(duì):小鍋妒挎;定稿:千葉知風(fēng)
在我之前發(fā)布的文章 構(gòu)造器注入(Constructor Injection) 中,有這樣的案例:在 struct
中有一個(gè)屬性西饵,這屬性需要在外部讀酝掩,并只能在內(nèi)部進(jìn)行寫。當(dāng)時(shí)的實(shí)現(xiàn)方式是:
struct Counter {
// `count` 在這里必須是一個(gè) var
// 但我并不想將 `count` 設(shè)為公開的眷柔,
// 所以加了 private 定為私有的
private var count: Int
// 現(xiàn)在就只能通過這種方式在外部訪問 `count` 了
func getCount() {
return count
}
}
這種方式并不優(yōu)雅期虾,但卻是我唯一能想到的解決方案。幸運(yùn)的是驯嘱,現(xiàn)在我找到了一個(gè)更好的方式镶苞!
Twitter 上 @mipstian 指出可以通過設(shè)置私有的 Setter 方法來達(dá)到效果,就像這樣:
struct Counter {
// 現(xiàn)在就只有setter是private的了鞠评!
private(set) var count: Int
}
對(duì)當(dāng)前案例來說茂蚓,將 Counter
設(shè)置為模塊內(nèi)公開(也就是internal)。但如果你是要做 SDK剃幌,你可以像下面這樣公開 Getter 聋涨,同時(shí)隱藏 Setter:
public struct Counter {
// 現(xiàn)在就只有setter是private的了!
public private(set) var count: Int
}
我也不知道我怎么就錯(cuò)過了這個(gè)知識(shí)(可能是因?yàn)槲乙恢倍急M量使用 let
的原因)锥忿,但我真的很慶幸最終我還是知道了這個(gè)超贊的 Swift 特性牛郑。
--
以上全文完,但是作為一個(gè)走心的翻譯組敬鬓,我們發(fā)現(xiàn)我們還翻譯過其它類似的文章淹朋,以下鏈接可以供參考:
本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán)钉答,最新文章請(qǐng)?jiān)L問 http://swift.gg础芍。