我是编程领域的初学者,因此选择“Swift”作为我的第一门编程语言。到目前为止,一切都很顺利,但是现在我正在学习结构和实例,如何更新它们等等,并且我收到了神秘的控制台错误,并且我无法继续进行我的项目。

这么麻烦

我创建了一个名为“Tiger.swift”的结构。有该结构的属性,例如名称,年龄等。在“viewController”中,我创建了一个名为myTiger的新变量,并尝试更新其属性,并且在控制台中创建println命令后,出现了一些奇怪的现象。它会编译并告诉我“构建成功”,但在控制台中会出现类似这样的内容。

“我的老虎的名字是:跳跳虎,它的年龄是3,它的年龄是3,它的图像是Optional()”

而这个奇怪的事情是“可选的”。因为如果以后我要更新实例,它不会编译并显示给我:

“我的老虎的名字是:跳跳虎,它的年龄是3岁,它的年龄是3岁,图像是Optional()
致命错误:解开Optional值时意外发现nil
(lldb)”

如果没有快速解决方案或我偶然制作的小错误,则有一个指向Git存储库的链接(https://github.com/llinards/lionsandtigers)。

谢谢您的帮助!

谢谢!

最佳答案

我仔细查看了您的代码:

  • 我将Tiger结构的image属性更改为可选属性,因为您没有模板或占位符图像(如果有,则可以为该图像设置初始值)。
  • 您的情节提要(包括您的IB​​Outlets)非常搞砸...我不知道那是怎么回事,我以前从未见过这样的事情...
  • 我上载了项目here项目的工作副本(很难在此处显示与IB相关的内容,我只是删除并重新添加了您的标签和视图)。
  • 我所做的相关代码更改如下:

    在您的Tiger模型对象(Tiger.swift)中,我将最后一行从
    var image = UIImage(named:"")
    


    var image: UIImage?
    

    您遇到的第一个错误是因为UUImage(named:"")返回nil。在Swift中,非可选类型永远不能为零。

    ViewController中,将Tiger-initializtion更改为
    Tiger(age: 3, name: "Tigger", breed: "TOne", image: UIImage(named: "t1.jpg"))
    

    您的println() call 显示:

    我的老虎的名字是:跳跳虎,它的年龄是3,它的年龄是3,并且它的图像是可选项(UIImage:0x7f8d78f43c90)

    这是正确的,因为您的图像现在被包装为可选图像。
  • 10-08 16:55