美文网首页Swift学习
Swift:带有私有设置方法的公有属性

Swift:带有私有设置方法的公有属性

作者: 梁杰_numbbbbb | 来源:发表于2016-01-11 22:27 被阅读753次

作者:Thomas Hanning,原文链接,原文日期:2015-12-24
译者:小袋子;校对:lfb_CD;定稿:Cee

Swift 可以很方便地创建带有私有设置方法的公有属性。这可以让你的代码更加安全和简洁。

封装

封装从根本上意味着类的信息和状态应该对外部类隐藏,只有类自身可以操作。因此,所有的 bug 和 逻辑错误更加不可能发生了。

通常你会使用 setter 以及 getter 来达到封装的目的。然而,有时候你根本不想对外提供类中的设置方法。对于这样的情况,你可以使用带有私有设置方法的属性。

例子

假设我们想要创建一个代表圆的类,那么圆的半径应该是可以改变的。而且,该圆的面积和直径应该可以从圆的实例中获取,而这两个属性不应该被类本身以外所更改。出于性能考虑,面积和直径也应该只计算一次。

所以这个圆类应该是这样的:

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
    } 
}

现在所有的需求都满足啦。然而,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 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

相关文章

  • Swift:带有私有设置方法的公有属性

    Swift可以很方便地创建带有私有设置方法的公有属性。这可以让你的代码更加安全和简洁。 封装 封装从根本上意味着类...

  • Swift:带有私有设置方法的公有属性

    作者:Thomas Hanning,原文链接,原文日期:2015-12-24译者:小袋子;校对:lfb_CD;定稿...

  • Cocoapods制作私有库问题集合

    Swift库 依赖私有库、公有库 校验方法 此错误在依赖私有库后设置版本号就成功了,版本号可以设置>=0.3.4。...

  • Javascript 面向对象(共有方法,私有方法,特权方法,静

    一,私有属性和方法 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以...

  • ES5、ES6继承

    ES5、ES6继承方式 继承的目标: 父类公有属性和方法为子类公有属性和方法父类私有属性和方法为子类私有属性和方法...

  • 公有、私有、静态属性和方法的区别2018-07-10

    //私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用...

  • 继承

    继承: 子类必须有父类的公有和私有属性和方法 继承私有属性: 改变子类的this指向 继承公有方法: 直接把父类的...

  • 面向对象的三大特性

    1、封装 两大概念 : 公有 和 私有 1、公有:公有方法和公有属性实例化出来的对象能够直接访问到的属性和方法就是...

  • JavaScript 构造函数私有、公有、静态、特权方法

    3. 构造函数的私有、公有、静态、特权方法 私有属性和方法创建:在构造函数内部创建的变量是私有属性,创建的函数是私...

  • 2018-12-06

    类的属性-总结 类属性,也是公有属性 类的私有属性 对象的公有属性 对象的私有属性 内置属性 函数的局部变量 全局...

网友评论

    本文标题:Swift:带有私有设置方法的公有属性

    本文链接:https://www.haomeiwen.com/subject/zfzqkttx.html