Swift 中“使用未解析的标识符”

Posted

技术标签:

【中文标题】Swift 中“使用未解析的标识符”【英文标题】:"Use of unresolved identifier" with Swift 【发布时间】:2014-10-13 15:36:58 【问题描述】:

我正在用 Swift 重写我的一个应用程序,它显示了 South Kohala 的实时天气数据。到目前为止爱斯威夫特!

我遇到了一个小问题。我有一个基于标签栏的应用程序,仅限 iPad。

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

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

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

这似乎是一个范围问题,但由于常量是在类中创建的,我只是不明白为什么它在 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
    

【问题讨论】:

【参考方案1】:

这是因为List纯粹是viewDidLoad内部的局部;在你声明它的地方,其他方法看不到它。

对比,比如forecastsTable,它被声明在在任何方法之外,也就是说任何方法都可以看到。

这种行为称为“作用域”,对任何编程语言都至关重要。方法内声明的变量在方法外既不可见,也不在方法完成运行后持续存在。因此,在您的示例中,List 不仅在cellForRowAtIndex 运行时不可见,而且在cellForRowAtIndex 运行时甚至不存在 - 它已被销毁很久以前。

【讨论】:

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

以上是关于Swift 中“使用未解析的标识符”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中“使用未解析的标识符”

使用未解析的标识符 'json' (Swift 3) (Alamofire)

iOS [Swift]:解析 Facebook 登录“使用未解析的标识符‘权限’”

在核心数据swift ios中使用未解析的标识符“模型”

Swift ui macos ProgressView 使用未解析的标识符'ProgressView'

Swift:使用未解析的标识符“addChild”