如何创建单例并跳过sharedInstance静态属性语法部分

时间:2016-06-23 18:24:09

标签: ios swift singleton

拥有以下单身:

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()
    }

}

enter image description here

我想输入Colors.gradients.blueToRed

3 个答案:

答案 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.mainColorColors.Gradients.blueToRed