Swift Magic: Public Getter, Private Setter


作者:Natasha The Robot 原文链接

  在我的这篇 Constructor Injection blog中,我写了一个结构体的例子,它有一个属性,属性可以从外部读取,但是写权限只能在内部,之前的代码看起来是这样的:

struct Counter {
    // `count` here has to be a var 
    // but I never want to set the `count` externally, 
    // so I made it private
    private var count: Int

    // so this is the only way to access the count externally
    func getCount() {
        return count
    }
}

  这个写法我不是很满意,但是当时这是我能想到的唯一方式来这样来做。幸运的是,有一个更好的方法!

@mipstian 告诉我,可以只指定写权限为私有,像这样:

struct Counter {
    // I specify that only the setter is private!
    private(set) var count: Int
}

  在我的例子模块中,Counter结构体是“public”(其实是internal),这样读取就没问题了。如果你需要写SDK,你可以显示的指定 getter 是公开的,setter 是私有的,像这样:

public struct Counter {
    // I specify that only the setter is private!
    public private(set) var count: Int
}

  不知道我怎么错过了这个写法(我想这是因为我倾向于尽可能的使用let),但是很高兴在swift中找到这么优雅的方式,我甚至还不知道这样的方式。

Zephan: 尝试的第二篇翻译,水平有限,只能翻译比较短的,还要加油啊!