拥有以下单身:
class Colors {
static let sharedInstance = Colors()
private init() {}
let mainColor = UIColor.redColor()
}
我在其他一些课程中称之为:
Colors.sharedInstance.mainColor
有没有办法像这样调用它?:
Colors.mainColor
如果我在里面有一个结构怎么办?
class Colors {
static let sharedInstance = Colors()
private init() {}
let mainColor = UIColor.redColor()
struct gradients {
let blueToRed = UIColor.blueColor()
}
}
我可以调用渐变的唯一方法是:
Color.gradients().blueColor
如果我添加一个静态属性来初始化结构我可以摆脱括号,但是在输入自动完成时我会看到静态属性和结构:
class Colors {
static let sharedInstance = Colors()
static let gradientsProperty = gradients()
private init() {}
let mainColor = UIColor.redColor()
struct gradients {
let blueToRed = UIColor.blueColor()
}
}
我想输入Colors.gradients.blueToRed
答案 0 :(得分:2)
我想出了这个答案。 Singletons的原因是简单的使用和性能,因为不需要每次都实例化类或结构。
此处存储的数据也不会流经应用程序,它不会在应用程序中进行修改,它只是可重用性的基本颜色,也可能是其他类似UI元素的间距常量。
如上所述,在这种情况下不需要类,因为我不会修改数据。
这个答案允许我正在寻找的语法:
struct Style {
private init() {}
static let color = Color()
static let gradient = Gradient()
}
struct Color {
let mainColor = UIColor.redColor()
let secundaryColor = UIColor.blueColor()
let textColor = UIColor.darkGrayColor()
}
struct Gradient {
let backgroundGradient = UIColor.brownColor()
let overlayGradient = UIColor.yellowColor()
}
这是您使用它的方式:
Style.color.mainColor
Style.gradient.backgroundGradient
答案 1 :(得分:1)
在这种情况下,当静态字段足够时,没有理由使用单例:
class Colors {
static let sharedInstance = Colors()
static let gradientsProperty = gradients()
private init() {}
static let mainColor = UIColor.redColor()
struct gradients {
let blueToRed = UIColor.blueColor()
}
}
答案 2 :(得分:0)
您可以使用静态属性来避免创建单例:
struct Colors {
static let mainColor = UIColor.redColor()
struct Gradients {
static let blueToRed = UIColor.blueColor()
}
}
通过这样做,您可以拨打Colors.mainColor
和Colors.Gradients.blueToRed
。