在构建用于搜索我正在构建的项目的工作类型列表的搜索栏时,我遇到一些问题。我收到许多红色的感叹号,它们表示“ tblSearchResults”是一个无法解析的标识符。
这是发生问题的项目源代码。
func WorkTypeSearchable() {
let pathToFile = NSBundle.mainBundle().pathForResource("work", ofType: "txt")
if let path = pathToFile {
let workString = String(contentsOfFile: path, encoding:
NSUTF8StringEncoding, error: nil)!
let WorkTypeSearchable = workString.componentsSeparatedByString("\n")
tblSearchResults.reloadData()
}
}
您能解释一下为什么我会因为无法解析的标识符而出现错误,以及我的字符串“ workString = String(code)...出现错误...
我正在使用所有适当的类,如下所示:
class ViewController: UIViewController, UIPickerViewDataSource,
UIPickerViewDelegate, UITableViewDelegate, UITableViewDataSource,
UISearchResultsUpdating, UISearchBarDelegate {
请注意,我稍后还将在程序中使用选择器。
最佳答案
未解决的标识符错误表明Xcode找不到您定义tblSearchResults
的位置。您是否连接了IBOutlet并初始化了委托?单独实现委托不会导致tblSearchResults
指向所需的UITableView。
要创建IBOutlet,请打开助手编辑器,然后从UITableView按住Control并拖动到类声明的正下方,然后将类型更改为Outlet,并将名称更改为tblSearchResults
。然后,您可能还想在viewDidLoad()
中初始化委托和数据源,如下所示:
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate {
@IBOutlet weak var tblSearchResults: UITableView!
override func viewDidLoad() {
tblSearchResults.delegate = self
tblSearchResults.dataSource = self
//Insert other initialization code here
}
}
字符串初始化:Swift 1 vs.Swift 2
您提到使用的是Swift 2,它不再使用代码中使用的String initialization方法。有两个区别:
您必须使用NSString而不是String
您必须使用try语句
尝试以下操作:(请注意,这是不安全的,如果无法读取文件,则应用程序将崩溃)
let text2 = try! NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding)