如何在函数中更新Swift中的全局变量

时间:2017-07-23 16:02:35

标签: swift function global-variables

我正在学习Swift并且有一个关于将全局变量传递给要更改的函数的问题。

如果我在类中声明了这样的全局变量:

var autoCount = 0

然后我想编写一些函数来管理更新它:

func updateAutoCount {
    autoCount += 1
}

上面是否可以接受,或者我应该像这样制作函数签名,即使我传递了一个随时可用的全局变量:

func updateAutoCount(autoCount: inout Int)  {
    autoCount += 1
}
顺便说一句,我认为autoCount应该是一个全局变量而不是局部变量,因为我希望范围是全局的,并且只要视图可用而不是函数调用的生命期,它希望它保留其值。 p>

由于

1 个答案:

答案 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()访问。

将变量设置为全局通常不是最安全的想法,因为您最终可能会遇到命名空间问题(并且通常会使代码混乱)。