因此,我对Swift还是很陌生,希望在这种大流行期间能够自学Swift。 我正在制作一个应用程序,它要做的就是在按下按钮时更改标签的颜色。 我的故事板看起来像这样
@IBAction func ChangeButton(_ sender: Any) {
TopLeft.backgroundColor = CornerColor(c: TopLeft.backgroundColor!).getFirstColor()
}
我的CornerColor类看起来像这样
class CornerColor{
var currColor : UIColor
init(c : UIColor) {
self.currColor = c
}
private static let colorsArray = [UIColor.black, UIColor.red, UIColor.yellow, UIColor.blue]
var index = colorsArray.firstIndex(of: currColor)
....
}
我希望索引是将TopLeft.backgroundColor传递给CornerColor类时,它将读取颜色并查看颜色在数组中的位置,然后执行index ++获取下一个颜色。
但是,似乎在“ var index”行中,它显示“不能在属性初始化程序中使用实例成员'currColor';属性初始化程序在'self'可用之前运行”
我不太了解发生了什么。非常感谢您的帮助!
答案 0 :(得分:0)
在 init()
调用之前初始化属性(代码的顺序无关紧要,以防万一),这就是为什么会出错。这是更正的变体
class CornerColor{
var currColor : UIColor
init(c : UIColor) {
self.currColor = c
self.index = colorsArray.firstIndex(of: c)
}
private static let colorsArray = [UIColor.black, UIColor.red, UIColor.yellow, UIColor.blue]
var index: Int
....
}
答案 1 :(得分:0)
这意味着您无法初始化刚在Class中创建的属性。 从技术上讲,初始化器是在类中执行的第一件事,如果在调用初始化器之前使用属性,则尚未创建该属性。 您可以做的是在类内部创建一个方法,然后在初始化类后调用它,如下所示:
class CornerColor{
var currColor : UIColor
private static let colorsArray = [UIColor.black, UIColor.red, UIColor.yellow, UIColor.blue]
var index : UIColor
init(c : UIColor) {
self.currColor = c
self.getNextColor()
}
func getNextColor(){
self.index = colorsArray.firstIndex(of: currColor)
}
....
}
或者您可以在IBOutlet中调用该方法:
@IBAction func ChangeButton(_ sender: Any) {
TopLeft.backgroundColor = CornerColor(c: TopLeft.backgroundColor!).getFirstColor()
CornerColor.getNextColor()
}