Swift:使用成员常量作为函数参数的默认值

Dev*_*shi 4 function-parameter swift

我有一个快速的类,我试图在其中传递函数参数的默认值:

class SuperDuperCoolClass : UIViewController {
   // declared a constant
   let primaryColor : UIColor = UIColor(red: 72.0/255.0, green: 86.0/255.0, blue: 114.0/255.0, alpha: 1.0)

   // compilation error at below line: SuperDuperCoolClass.Type does not have a member named 'primaryColor'
   func configureCheckmarkedBullet(bullet: UIButton, color: UIColor = primaryColor){
       // some cool stuff with bullet and primaryColor
   }
}
Run Code Online (Sandbox Code Playgroud)

如上所述,如果我尝试使用常数作为函数参数的默认值,则编译器会抱怨以下错误:

SuperDuperCoolClass.Type does not have a member named 'primaryColor'
Run Code Online (Sandbox Code Playgroud)

但是如果我这样直接分配RHS值,它不会抱怨:-/:

func configureCheckmarkedBullet(bullet: UIButton, color: UIColor = UIColor(red: 72.0/255.0, green: 86.0/255.0, blue: 114.0/255.0, alpha: 1.0)) {
        // now I can do some cool stuff
    }
Run Code Online (Sandbox Code Playgroud)

关于如何使上述编译错误静音的任何想法?

Mar*_*n R 5

您必须将默认值定义为静态属性:

class SuperDuperCoolClass : UIViewController {

    static let primaryColor : UIColor = UIColor(red: 72.0/255.0, green: 86.0/255.0, blue: 114.0/255.0, alpha: 1.0)

    func configureCheckmarkedBullet(bullet: UIButton, color: UIColor = primaryColor){
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码使用Swift 1.2(Xcode 6.3)进行编译,该版本增加了对静态计算属性的支持。在早期版本中,您可以将struct包含该属性的嵌套定义为解决方法(比较 尚不支持的Class变量):

class SuperDuperCoolClass : UIViewController {

    struct Constants {
        static let primaryColor : UIColor = UIColor(red: 72.0/255.0, green: 86.0/255.0, blue: 114.0/255.0, alpha: 1.0)
    }

    func configureCheckmarkedBullet(bullet: UIButton, color: UIColor = Constants.primaryColor){
    }
}
Run Code Online (Sandbox Code Playgroud)