swift - 我可以在 Swift 中创建对变量的引用吗?
问题描述
是否可以用很少的代码创建一个变量作为对另一个变量的引用,以便更改第一个变量的值也会更改第二个变量的值?有没有现成的课程可以做到这一点?还是我必须将变量的值更改为test.shared.changeMe = true
?
class Test {
var shared: Test = Test()
var changeMe: Bool = false
func printValue() {
print("changeMe: " + String(changeMe))
}
}
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
var reference: Bool = test.shared.changeMe // <- The variable "reference" should be a reference to the variable "changeMe" of the class test.
reference = true
print("Reference: " + String(reference))
test.shared.printValue()
}
}
class Test {
var shared: Test = Test()
var changeMe: Bool = false
func printValue() {
print("changeMe: " + String(changeMe))
}
}
解决方案
没有对变量的引用,但您可以使用Computed Variable来模拟行为。
计算变量计算它们的值而不是存储它们,它们的编写方式与计算属性相同。通过写get
和set
来读写原始变量,可以模拟出你想要的行为。
override func viewDidAppear(_ animated: Bool) {
var reference: Bool {
get { return test.shared.changeMe }
set { test.shared.changeMe = newValue }
}
reference = true
print("Reference: " + String(reference))
test.shared.printValue()
}
注意:如果您需要访问reference
外部viewDidAppear
,则将其声明为类上的计算属性(只需将其移到函数之外)。
推荐阅读
- gradle - 如何在 jar 中添加 *.txt 文件包(连同其他 *.class 文件)?
- amazon-ec2 - 环境变量未在给定路径中创建
- python - 删除熊猫数据框中以非数字开头的列中的记录
- c# - 使用asp.net在数据库中插入数据时如何避免重复值?
- linux - 匹配一个模式并在模式前删除 3 行以及匹配的模式行
- windows - Ansible 2.7.10 与 rabbitmq 3.8.7 通信时出错
- javascript - 我如何拦截 xmlhttprequest 并在请求发送之前进行一些 api 调用
- c++ - 如何使用 CGAL 简化 3d 网格的特定区域
- html - 如何使用休息 API 使请求以角度工作
- java - assertTrue 在 JUnit 测试中给出 NPE,但文件不为空