【问题标题】:Expected Declaration with UIImageView [duplicate]UIImageView 的预期声明 [重复]
【发布时间】:2018-11-08 04:45:12
【问题描述】:

编辑:我意识到为什么我对 viewdidload 感到困惑。本练习的目的是处理正在显示的更改图像,我只是在玩代码只是为了测试它是否显示。现在我将问题的代码放在一起,我对正在发生的事情有了更清晰的了解。

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func btnNext(_ sender: Any) {
        imageView.image = UIImage(named: "husky")
    }

我在将图像加载到单视图 IOS 应用程序时遇到问题。这是我的代码:

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!

    imageView.image = UIImage(named: "shiba")

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }     

}

但我不断收到“预期声明”错误。到目前为止,我让它工作的唯一方法是在 viewDidload 方法中使用 imageView.image 声明。

【问题讨论】:

  • 您可以声明图像来代替您拥有的图像,放入var shibaImage = UIImage(named: "shiba"),然后在 viewDidLoad 中将该图像附加到 imageView,imageView.image = shibaImage
  • 您对一个非常基本的 OOP(面向对象编程)概念 - 实例化存在误解(或者可能只是感到困惑)。虽然您的 imageView 在 InterfaceBuilder 或 IB 中声明(它也可以在代码中),但在执行 viewDidLoad 之前它实际上并不“存在”。那么在此之前,您如何才能真正设置图像呢? Xcode 错误——尤其是构建错误——非常好。你需要听听他们在说什么。

标签: swift uiimageview


【解决方案1】:

将您的imageView.image = UIImage(named: "shiba") 放入viewDidLoad() 函数中。

swift 中的一个类是由一系列声明组成的。这些声明可以是变量,让常量,函数,ext。因此,当您将imageView.image = UIImage(named: "shiba") 直接放在您的类中时,swift 期望该行声明某些内容(var、let、func)。通过将您的语句放在viewDidLoad() 中,您是说每当调用viewDidLoad() 时都应该执行该语句。 viewDidLoad() 在所有插座都已连接并且视图对用户可见之前被调用,这是为图像视图设置图像的好时机,就像您的情况一样。

【讨论】:

  • 可能 b正确,但为什么?不要只给出正确的答案,解释它。帮助其他可能需要帮助的人了解为什么这是正确的答案。
  • @dfd 你是对的,我已经编辑了我的答案以尝试添加更多上下文。
  • 郑重声明,我从未否决您的回答。这是正确的!只是需要更多。 (并发布了一条 OP 评论,因为它被正确标记为重复。)老实说?查看 dup 链接,该链接 比您的答案更糟糕,这意味着我现在应该投票赞成!你解释了事情,甚至发布了代码。复制链接?哦。一点帮助都没有。
  • 我知道我在哪里变得如此困惑。该程序的目的是演示如何在图像视图中更改图像,但我最终只是通过尝试测试 UIImageview 而使自己感到困惑,而不仅仅是解决整个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
相关资源
最近更新 更多