Swift中的私人二手“set()”

时间:2016-03-22 07:12:33

标签: swift

这是点示例介绍由apple提供的pint结构setter getter如何才能使setter私有

struct Point {
    var x = 0.0, y = 0.0
}
struct Size {
    var width = 0.0, height = 0.0
}
struct Rect {
    var origin = Point()
    var size = Size()
    var center: Point {
        get {
            let centerX = origin.x + (size.width / 2)
            let centerY = origin.y + (size.height / 2)
            return Point(x: centerX, y: centerY)
        }
        set(newCenter) {
            origin.x = newCenter.x - (size.width / 2)
            origin.y = newCenter.y - (size.height / 2)
        }
    }
}

3 个答案:

答案 0 :(得分:17)

docs中,在“Getters and Setters”标题下的第一个代码示例中,您可以看到要拥有私有的setter,语法如下所示:

private (set) var center: Point {...

一些澄清: Swift中的private工作方式略有不同 - 它将对属性/方法的访问限制在文件范围内。只要文件中有多个类,他们就能访问所有内容。为了使private“工作”,您需要将您的classess放在单独的文件中。

答案 1 :(得分:1)

您可以按如下方式细化struct Rect。这将允许您只获得中心但不设置它。

struct Rect {

    var center:Point {
        let centerX = origin.x + (size.width / 2)
        let centerY = origin.y + (size.height / 2)
        return Point(x: centerX, y: centerY)
    }

    var origin = Point()
    var size = Size()
}

答案 2 :(得分:0)

解决方案#1

struct A {

    private var a: String

    public init(a: String) {
        self.a = a
    }

    func getA() -> String {
        return a
    }
}

let field = A(a:"a")
field.getA()

解决方案2

struct A {

    private(set) var a: String

    public init(a: String) {
        self.a = a
    }
}

let field = A(a:"a")
field.a