类型没有成员

时间:2019-05-25 04:03:58

标签: swift

我是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)”

1 个答案:

答案 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]