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