【问题标题】:Expected Declaration error creating array in ViewController, can't work out why在 ViewController 中创建数组时出现预期声明错误,无法找出原因
【发布时间】:2014-08-20 05:01:18
【问题描述】:

首先,我使用的是 Xcode 6 beta 2。其次,我确实有编程经验(基础、VB、脚本语言),但它不包括任何严肃的 OO 编程,而且我对 IOS 编程完全陌生。直接进入 Swift。在此先感谢那些可以提供帮助的人。这几天我一直在为此苦苦挣扎。

在构建简单的 UIImage 数组时遇到问题。 (为简单起见,我删除了所有其他代码。)我试图理解为什么声明 UIImage 数组和加载图像在 viewDidLoad() 中工作,但不是在 ViewController 的“基础”,这是我似乎需要的地方它可以让其他事情发挥作用。

(我注意到它似乎与这是一个数组声明这一事实有关,这使我更加困惑。我可以在任一位置声明和分配简单的 UIImage 变量。)

这是我的代码:

//  ViewController.swift


import UIKit

class ViewController: UIViewController {                           

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

    }



    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    var icon = UIImage[]()

    icon.append(UIImage(named: "yes.png"))    <<==== expected declaration error

    icon.append(UIImage(named: "no.png"))

}

但是这段代码没有:

import UIKit
class ViewController: UIViewController {

     override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        var icon = UIImage[]()

        icon.append(UIImage(named: "yes.png"))    <==== no error, and builds

        icon.append(UIImage(named: "no.png"))

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

}

【问题讨论】:

  • 我不了解 Swift,但我认为问题在于您试图在任何方法之外使用代码。
  • 您在班级成员级别编写代码的意图是什么。应该只有属性和方法声明。也许您想将代码移动到初始化程序

标签: ios arrays xcode uiviewcontroller swift


【解决方案1】:

您只能在类中的方法之外进行属性声明。类的所有功能都在方法内部。当您在方法之外声明 var icon = UIImage[]() 时,它是一个实例属性声明并且是有效代码。

接下来的两行尝试修改属性。方法之外的代码永远不会执行,因为无法调用它。虽然您可以在方法之外声明属性,但您必须在类的方法中使用它们。

我建议您学习更多有关面向对象编程的知识,因为您似乎还没有完全掌握它。您可能想尝试一种比 swift 当前具有更多可靠性和学习资源的语言。如果您打算进行 iOS 开发,即使您想使用 Swift,学习 Objective-c 也会很有帮助,因为您将接触到两种语言中相同的 Apple API。

【讨论】:

  • 感谢您的帮助!
  • 感谢您的帮助!什么是/正在让我(仍然是)是我可以在方法之外var dice1 = UIImage(named: "Die-1.png"),但对于数组似乎不是这样。至于 obj-C .. 尝试并放弃了几次......但我可能需要时间让 swift 成熟并且没有更多错误,所以我可以确定错误是我而不是 Xcode/swift 错误。
  • 那是因为它也是一个声明。变量声明允许在方法之外。 var a = 10 let b = "hello"
  • 变量声明允许在方法之外,但属性声明必须出现在方法内部。对吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多