gpt4 book ai didi

swift - 私有(private)集类及其方法 Swift 4

转载 作者:行者123 更新时间:2023-11-28 14:25:58 25 4
gpt4 key购买 nike

我正在尝试声明一个类型类私有(private)集变量,但我想知道如何将其扩展到它的属性。

我有:

class ClassA{
var name:String?
}

然后在 B 类中:

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

}

这是我在其他类(class)的成绩:

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

可能是重复的,但我不知道它的名字是什么

最佳答案

因为ClassA是一个引用类型,你可以想到这一行:

private (set) var aCLassA = ClassA()

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

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

您可以将 ClassA 上的所有相关属性标记为 private(set) 以获得您想要的行为。或者,您可以将 ClassA 设为类似于 struct 的值类型,以便对任何 ClassA 的属性进行赋值都会导致 的实际值code>aClassA 改变。

您可以在 Playground 中尝试此操作以查看行为:

struct ClassA {
var name = "ClassA"
}

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


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

关于swift - 私有(private)集类及其方法 Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com