无法将'Int'类型的值转换为预期的参数类型'ClassName'

时间:2016-01-04 06:23:10

标签: swift

struct ColorPalette {
    var DefaultBarTintColor : UIColor = UIColorFromRGB(0x75b5d4)
    func UIColorFromRGB(rgbValue: UInt) -> UIColor {
        return UIColor(
            red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
            alpha: CGFloat(1.0)
        )
    }
}

错误:无法将“int”类型的值转换为预期的参数类型“MyClassName”

如果我这样做

view.backColor = UIColorFromRGB(UIColorFromRGB)

它有效

但我想这样做:

view.backColor = ColorPalette.DefaultBarTintColor

我不知道如何解决它

2 个答案:

答案 0 :(得分:2)

要在struct内调用功能,您需要使用static关键字。以下是您的修改功能!

struct ColorPalette {

static var DefaultBarTintColor : UIColor = ColorPalette.UIColorFromRGB(0x75b5d4)

static func UIColorFromRGB(rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
       )
   }
}

现在你可以这样打电话!

view.backColor = ColorPalette.DefaultBarTintColor

但是,如果您需要在不使用static关键字的情况下致电,则需要制作struct的对象。像:

let myColorPallete = ColorPalette()

然后您可以像这样访问它:

viewNoEvents.backgroundColor = myColorPallete.DefaultBarTintColor

希望这有帮助!

答案 1 :(得分:0)

不是在声明时初始化属性,而是可以使用如下初始化函数:

struct ColorPalette {
    var DefaultBarTintColor : UIColor!
    func UIColorFromRGB(rgbValue: Int) -> UIColor {
        return UIColor(
            red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
            alpha: CGFloat(1.0)
        )
    }
    init(rgbValue: Int) {
        self.DefaultBarTintColor = UIColorFromRGB(rgbValue)
    }
}

然后通过传递十六进制值来创建实例,如下所示:

    var color = ColorPalette(rgbValue: 0x75B5D4)