我是Swift的新手,正在尝试创建一个非常简单的应用程序,但是由于某些原因,变量无法正常工作。
我不太确定问题是什么,但是我尝试将var更改为let。
class ImageViewController: ViewController {
var blocks = [Block(size: 100, centerX: 100, centerY: 100, code: "1", color: image.colorDic["1"]!)]
var codes = ["1"]
var colors = [UIColor(named: "Red")]
//create image
var image = Image(blocksArray: blocks, code: codes, color: colors)
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .blue
title = "Title"
for block in image.blocksArray{
view.addSubview(block.block)
}
// Do any additional setup after loading the view.
}
在创建图像的行上,出现错误
“类型'ImageViewController'没有成员'块'“
此外,在我创建“颜色”的行下,我也得到
“线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffee74cbf48)”
答案 0 :(得分:0)
您的属性图片在初始化之前都要访问block属性,要解决您的问题,应将变量“ image”标记为惰性变量,这意味着在其他属性被初始化后将其初始化,因此可以安全访问其他属性。
有关懒惰属性的更多信息
Swift官方文档说,
“当属性的初始值取决于实例初始化完成后才知道其值的外部因素时,惰性属性很有用。”
您可以在此处详细了解惰性属性:-Swift Properties Official documentation
以下是操作方法:-
lazy var image: Image = {
return Image(blocksArray: blocks, code: codes, color: colors)
}()
对于颜色部分,我认为这是个好习惯,尤其是对于像您这样的简单颜色并使用枚举版本时,避免在初始化时键入字符串。 更改为:-
var colors = [UIColor.red]
或者这个:-
var colors: [UIColor] = [.red]