【问题标题】:Private variables in swiftswift中的私有变量
【发布时间】:2020-06-12 03:55:12
【问题描述】:

在创建类时,这两种创建自定义类的实现在安全性方面有什么区别。就我使用它们而言,它们的工作方式完全相同,但听说使用私有变量是创建类的正确方法

class Person {

    var name:String
    var age:Int

    init(name: String, age: Int){
        self.name = name
        self.age = age
    }
}

class Person {

    private var _name: String
    private var _age: Int

    var name: String {
        set {
            self._name = newValue
        } get {
            return _name
        }
    }

    var age: Int {
        set {
            self._age = newValue
        } get {
            return _age
        }
    }

    init(name: String, age: Int){
        self._name = name
        self._age = age
    }
}

【问题讨论】:

  • 第二个版本没有意义。
  • 这是其他不使用 Swift 机制的语言的风格。
  • 私人或内部......

标签: ios swift


【解决方案1】:

private 绝对推荐使用,但仅在您希望为您的财产提供这种隐私的情况下使用。

您的第二个代码不能确保任何形式的隐私。这只是不必要地添加了更多代码。

可能存在这样一种情况,您希望保持类型 (class/struct) 的 写访问权限 私有,并允许类型之外的 读访问权限。为此,您可以将 private(set) 访问修饰符与您的属性一起使用,即

class Person {
    private(set) var name: String
    private(set) var age: Int

    init(name: String, age: Int){
        self.name = name
        self.age = age
    }
}

【讨论】:

  • 谢谢,它帮助我理解了私有变量和私有(集合)变量之间的关系。
  • 这段代码没有意义。实际上,您正在声明常量。如果类中没有其他代码修改属性,则将它们声明为let
  • @vadian 我知道这一点。但我不能将letprivate(set) 一起使用。
  • private(set) 在这种情况下被滥用。 变量实际上又是常量。与大多数其他语言不同,Swift 通过let 提供实常数。如果有代码修改类中的值,private(set) 是一种有用的方法。
  • @vadian 我解释了如何在这种情况下使用private(set)。不使用let 是我已经提出的问题。
猜你喜欢
  • 2016-06-26
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多