你在哪里放一个全局方法?

时间:2014-10-13 05:04:21

标签: ios swift

我有一个对我所有控制器都通用的功能:

func myColor() -> UIColor {
    return UIColor(red: 9.0/255.0, green: 134.0/255.0, blue: 255.0/255.0, alpha: 1)
}

我可以在哪里放置此功能,以便可以从任何控制器访问它?

3 个答案:

答案 0 :(得分:5)

默认情况下,应用程序中的所有默认访问范围(internal)功能都可用。如果您在不同的模块中定义了此功能,则需要使用public修饰符。

为了使您的代码更清晰,最好为UIColor创建扩展名。

extension UIColor {
    class func myColor() -> UIColor {
        return UIColor(red: 9.0/255.0, green: 134.0/255.0, blue: 255.0/255.0, alpha: 1)
    }
}

然后,您可以使用myColor与默认UIColor颜色相同的方式。

let systemColor = UIColor.blackColor()
let myColor = UIColor.myColor()

答案 1 :(得分:3)

1)您的函数每次都会在问题中返回相同的颜色吗?在这种情况下,为什么不在AppDelegate中将其设为静态颜色,您可以使用

访问任何地方
(UIApplication.sharedApplication() as AppDelegate).myColor

2)如果您的颜色每次都会根据您的类属性返回不同的颜色,但对所有类使用相同的公式,例如

func myColor() -> UIColor {
    return UIColor(red: (prop1 * 5)/255.0, green: prop2/255.0, blue: (prop3/2)/255.0, alpha: 1)  
}

您可以在基类中定义prop1,prop2,prop3和函数,每个类都可以覆盖它们并为属性设置自己的值。该功能不需要被覆盖。

3)如果每个类的计算颜色的公式不同,您可以尝试制定定义此函数和属性的协议。从该属性继承的每个类都必须提供自己的公式实现。

您可以根据需要选择合适的解决方案。

我希望这有帮助!

答案 2 :(得分:0)

添加一个swift文件名 UIColorExt.swift

import UIKit        
class func RGB(r: CGFloat, _ g: CGFloat, _ b: CGFloat, _ alpha: CGFloat = 1.0) -> UIColor{
   return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: alpha)
}

用法:

view.backgroundColor = UIColor.RGB(204, 119, 70)