Uitableview &引用;未解析标识符的使用“;迅速地

Uitableview &引用;未解析标识符的使用“;迅速地,uitableview,uiviewcontroller,swift,Uitableview,Uiviewcontroller,Swift,我正在用Swift重写我的一个应用程序,它显示南科哈拉的实时天气数据。爱情到目前为止 我有一个小问题,就是拖延时间。我有一个基于标签栏的应用程序,仅限iPad 我的一个选项卡是一个UIViewController,在情节提要中添加了一个TableView,以显示NOAA预测。我有一个数据类data,它从服务器检索列表,并在viewDidLoad中创建一个常量list。它是一个数组数组,每个子数组中有四个字符串 我已经验证了它在那里,因为我可以创建一个常量:List[0]和println所有字符串

我正在用Swift重写我的一个应用程序,它显示南科哈拉的实时天气数据。爱情到目前为止

我有一个小问题,就是拖延时间。我有一个基于标签栏的应用程序,仅限iPad

我的一个选项卡是一个
UIViewController
,在情节提要中添加了一个
TableView
,以显示NOAA预测。我有一个数据类
data
,它从服务器检索列表,并在
viewDidLoad
中创建一个常量
list
。它是一个数组数组,每个子数组中有四个字符串

我已经验证了它在那里,因为我可以创建一个常量:
List[0]
println
所有字符串

但是,当我使用它填充表视图时,会出现“使用未解析标识符”错误。如果相反,我尝试将单元格标题设置为“Test”,这样可以正常工作

这似乎是一个范围问题,但由于常量是在类中创建的,我不明白为什么它在
tableView
函数中不可见。我已经看了几十篇关于这个的帖子,但是我没有发现任何有用的东西。代码如下:

import UIKit

class ForecastsViewController: UIViewController,   UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var forecastsTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let instanceofData: Data = Data()
        let list = instanceofData.forecastsList() as NSArray
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
      var forecastList:NSArray = list[indexPath.row] //selects one of the arrays from List
      cell.textLabel?.text = forecastList[0] as string
           return cell
    }

这是因为
List
对于
viewDidLoad
的内部来说纯粹是本地的;在您声明它的地方,其他方法无法看到它

相反,例如,
forecastsTable
,它在任何方法之外声明,这意味着任何方法都可以看到它


这种行为称为“范围”,对任何编程语言都至关重要。方法内部声明的变量在方法外部既不可见,也不会在该方法完成运行后保持不变。因此,在您的示例中,
List
不仅在
cellforrowatinex
运行时不可见,而且在
cellforrowatinex
运行时它甚至不存在-它早就被销毁了。

顺便说一句,不要以大写字母开头变量(
List
)的名称。谢谢,马特。我以为viewDidLoad中声明的变量可用于其他函数。现在您知道这是错误的。在早期函数中设置的全局可见变量的值对于后期函数是可见的,但根据定义,局部变量不是全局可见的。