私有集合类及其方法Swift 4

时间:2018-07-27 09:41:46

标签: swift swift4

我试图声明一个类型类私有集合变量,但我想知道如何将其扩展到其属性。

我有:

class ClassA{
    var name:String?
}

然后在ClassB中

class ClassB{
private (set) aCLassA = ClassA()

}

那是我在其他班级上得到的结果:

var classB = ClassB()
classB.aCLassA = ClassA() //-->Expected Error
classB.aClassA.name = "NewName" //--> I want that to give an error

也许是重复的,但我不知道它的名字

1 个答案:

答案 0 :(得分:1)

由于ClassA是引用类型,因此您可以想到以下这一行:

private (set) var aCLassA = ClassA()

好像它说:“只有我(ClassB的实例)才可以更改aClassA指向的内容。”

ClassA指向的aClassA实例上设置一个属性,不会改变指针,它只会改变ClassB未“检测到”的实例本身,因为所有它知道它仍然希望在指向ClassA的内存地址处找到aClassA的实例。

您可以将ClassA上的所有相关属性标记为private(set),以获取所需的行为。另外,您可以将ClassA设为类似struct的值类型,以便对ClassA的任何属性进行赋值都会导致aClassA的实际值发生变化。

您可以在操场上尝试一下以查看行为:

struct ClassA {
  var name = "ClassA"
}

class ClassB {
  private(set) var aClassA = ClassA()
}


let b = ClassB()
b.aClassA.name = "Hello" // throws error