【问题标题】:Swift 5. Let first child class access a property, but not child of child classSwift 5. 让第一个子类访问一个属性,而不是子类的子类
【发布时间】:2021-09-30 20:41:47
【问题描述】:

是否可以在 Swift 5 中阻止子类的所有子类访问基类中的变量?请不要绕道协议解决方案。

class A { var a:String = ""}
class B : A {protected var a = ""}
class C : B 
{
   func use_a() 
   {
     a = //compiler should complain here that 'a' is protected and cannot be modified
   }
}

【问题讨论】:

  • 编译器怎么会抱怨protected,这不是java?请发布真实代码。但总的来说,您永远不能降低属性的可访问性。
  • 新行上的花括号...

标签: swift inheritance


【解决方案1】:

这是可能的,但只能通过使用文件结构来确定成员的范围。

文件 1:

class A {
  fileprivate var a = ""
}

class B: A {
  fileprivate override var a: String {
    willSet { }
  }
}

文件 2:

class C: B {
  var a = 867_5309

  func use_a() {
    super.a // 'a' is inaccessible due to 'fileprivate' protection level
  }
}

【讨论】:

  • 谢谢,唯一的限制是两个类必须在同一个文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多