在Swift中声明全局变量

时间:2014-10-28 04:59:10

标签: ios xcode swift

我想创建一个可以在整个应用程序中访问的全局自定义对象数组(AppDelegate,ViewController类,TableViewController类等)。我已经研究过一种方法,但还没有找到答案。我尝试过为数组提供一个公共范围,但是我收到了一个编译器警告Declaring public variable from internal class,当我尝试在另一个文件中访问它时,我收到一条错误,上面写着Use of unresolved identifier 'arrayObjectives'

如何让该数组全局可供应用程序中的所有文件访问,以及在哪里实例化该数组?

4 个答案:

答案 0 :(得分:22)

来自Swift Programming Language -

  

全局变量是在any之外定义的变量   函数,方法,闭包或类型上下文

因此,您可以在import语句之后直接在任何文件的顶部声明您的变量。

但是,我建议你认真考虑一下。通常全局变量不是一个好主意。您最好使用单例或使用依赖注入的属性。

你的第二个问题“我将在哪里实例化数组?”全局变量是坏的原因之一 - 它们的生命周期没有根据你的其他对象定义。在首次使用时初始化的单例可以消除此问题。

答案 1 :(得分:13)

您可以这样设置全局数组:

import UIKit

var abc : String = String()

您可以在任何其他文件中访问它,如:

abc = "ABC"

答案 2 :(得分:10)

尝试用这个创建一个新的Swift文件:

struct Constants {

  static let appName: String = "My App"

  struct Colors {

    static let colorTextStandard = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.3) //#000000

  }

  struct Data {

    static var myStrings = [String]()  // Yea, this is not a constant, but that's alright...

  }

}

然后你可以使用:

来引用那些全局常量(或者你可以使它们成为变量)
Constants.appName

Constants.Colors.colorTextStandard

Constants.Data.myStrings = [stringOne, stringTwo]

答案 3 :(得分:6)

我就这样做了......

class MessageViewCell {
    struct MessageViewCellHeightCache {
        static var cache: [String:CGFloat] = Dictionary<String, CGFloat>()
    }
}

我按如下方式访问它:

MessageViewCell.MessageViewCellHeightCache.cache["first"] = 12.0