我正在学习Swift并且有一个关于将全局变量传递给要更改的函数的问题。
如果我在类中声明了这样的全局变量:
var autoCount = 0
然后我想编写一些函数来管理更新它:
func updateAutoCount {
autoCount += 1
}
上面是否可以接受,或者我应该像这样制作函数签名,即使我传递了一个随时可用的全局变量:
func updateAutoCount(autoCount: inout Int) {
autoCount += 1
}
顺便说一句,我认为autoCount应该是一个全局变量而不是局部变量,因为我希望范围是全局的,并且只要视图可用而不是函数调用的生命期,它希望它保留其值。 p>
由于
答案 0 :(得分:0)
就我所知,这在语法上都很好。该变量应该是可访问的,因为它是一个var,你应该能够增加它。但是,根据您所描述的内容(希望变量在视图中存在),您可能会更好地对视图进行子类化并对其进行递增。类似的东西:
class AutocountingView: UIView {
private var autoCount = 0
func updateAutoCount() {
autoCount += 1
}
}
让某些东西成为全局的另一种选择(这也是不赞成的,但稍微不那么了),就是将它包装成单例模式。所以你会有类似的东西:
class AutocountHelper {
static let shared = AutocountHelper()
var autoCount = 0
func updateAutocount() {
autoCount += 1
}
}
然后您可以AutocountHelper.shared.updateAutocount()
访问。
将变量设置为全局通常不是最安全的想法,因为您最终可能会遇到命名空间问题(并且通常会使代码混乱)。