【发布时间】:2020-12-17 02:02:55
【问题描述】:
我正在构建一个简单的字典应用程序。我已经让它在用户搜索或不搜索时在 UItableView 上显示单词。我正在努力为每个单词分配自己的定义,但是在为单词数组中的每个单词设置目标时遇到了麻烦。
这是我的 ViewController 类及其内容的一部分:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!
var wordSearch = [String]()
var wordArray: [String] = []
var searching = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let url = Bundle.main.url(forResource: "zo_words", withExtension: "txt")! // file URL for file "words_alpha.txt"
do {
let string = try String(contentsOf: url, encoding: .utf8)
wordArray = string.components(separatedBy: "\n")
} catch {
print(error)
}
}
}
extension ViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return wordSearch.count
} else {
return wordArray.count
}
这是我的 wordSearch 功能:
extension ViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
wordSearch = wordArray.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased();})
searching = true
tableView.reloadData()
}
无法将“String”类型的值分配给“ViewController”类型 构建时在下面的函数中引发错误
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? DefinitionViewController {
destination.word = wordArray[(tableView.indexPathForSelectedRow?.row)!]
类定义视图控制器:
import UIKit
class DefinitionViewController: UIViewController {
@IBOutlet weak var lbDefinition:
UILabel!
var word: ViewController?
override func viewDidLoad() {
super.viewDidLoad()
lbDefinition.text = "\((word?.wordSearch)!)"
}
}
【问题讨论】:
-
如果您了解 segue 为您自己做了什么,这将对您自己有所帮助。
-
当从 UItableView 中单击一个单词时,我使用 segue “显示”定义。