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 中“使用未解析的标识符”的主要内容,如果未能解决你的问题,请参考以下文章
使用未解析的标识符 'json' (Swift 3) (Alamofire)
iOS [Swift]:解析 Facebook 登录“使用未解析的标识符‘权限’”