Struct имеет свойство fileprivate и на него нельзя ссылаться из значения аргумента по умолчанию в swift 4.1. - PullRequest
0 голосов
/ 15 мая 2018

Я использую структуру со значениями по умолчанию, как это.

 fileprivate struct Defaults {

    static var BackgroundColor = UIColor.white
    static var TextColor = UIColor.black
    static var Title = "Default Title"
    static var Message = "Default message!"
    static var AnimationDuration: Double = 0.25
    static var Duration: Double = 2
    static var Height: CGFloat = 90
    static var TitleFont: UIFont = UIFont(name: "SourceSansPro-Semibold", size: Defaults.FontSize)!
    static var MessageFont: UIFont = UIFont(name: "SourceSansPro-Regular", size: Defaults.FontSize)!
    static var FontSize: CGFloat = 14 {
        didSet {
            TitleFont = TitleFont.withSize(FontSize)
            MessageFont = MessageFont.withSize(FontSize)
        }
    }
}

У меня есть метод, в котором эти значения структуры передаются в качестве аргументов по умолчанию.Но в swift4 это не работает.

 class func showWithAnimation(_ animationType: AnimationType = .basic(timingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)),
                             title: String = Defaults.Title,
                             message: String = Defaults.Message,
                             backgroundColor: UIColor = Defaults.BackgroundColor,
                             textColor: UIColor = Defaults.TextColor,
                             duration: Double = Defaults.Duration) {

}

Пожалуйста, проверьте полный код здесь .

Какой обходной путь для этого?

Спасибо...

1 Ответ

0 голосов
/ 15 мая 2018

Есть два исправления, как указано ниже,

1) Возьмите Defaults struct из DropdownAlert и сделайте его public даже properties также, как вы хотите передать их в подписи метода, как показано ниже,

public struct Defaults {
    public static var BackgroundColor = UIColor.white
    public static var TextColor = UIColor.black
    public static var Title = "Default Title"
}

class func showWithAnimation(_ animationType: AnimationType = .basic(timingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)),
                                     title: String = Defaults.Title,
                                     message: String = Defaults.Message) {
    }

2) Держите Defaults внутри DropdownAlert, но сделайте его public, включая properties. И доступ, как показано ниже,

class func showWithAnimation(_ animationType: AnimationType = .basic(timingFunction: CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)),
                                 title: String = DropdownAlert.Defaults.Title,
                                 message: String = DropdownAlert.Defaults.Message) {
}
...