我的意图是为动态UITableViewCells
创建不同的UITableView
。我已经设置好单元格,我只需要添加一些逻辑即可显示哪个单元格。
我决定使用if语句返回单元格。某种程度上,这会造成错误,因为func tableView
也需要返回'cell'并且if语句之外的代码无法访问let cell = ..
。
我该如何解决这个问题?
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let date = dateArray[indexPath.row]
let title = titleArray[indexPath.row]
let desc = descArray[indexPath.row]
if notificationType == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "TuvTavleViewCell") as! TuvTableViewCell
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "NotificationViewCell") as! NotificationViewCell
return cell
}
cell.setTitle(title: title)
cell.setDesc(desc: desc)
cell.setDate(date: date)
return cell
}
答案 0 :(得分:2)
好吧,你要问的是
如何在if语句之外获取常量的访问权限?
由于scope修饰符,这实际上是不可能的,在退出任何类型的闭包时声明的任何内容都会失去其范围。
因此,您不能从该语句中访问if
语句中声明的任何内容。
针对您的案例,现在如何解决当前问题,您有两个选择。
您可以在cell
中声明每个if
,也可以在情况下对其进行处理。
您甚至可以通过应用一些协议将其提升到另一个层次,为此,我将向您展示一个简单的示例。
首先,您需要此protocol
,并需要在自定义单元格类中进行确认,
protocol ConfigurableCell {
func set(title: String)
func set(desc: String)
func set(date: Date)
}
确认class TuvTableViewCell: ConfigurableCell
和class NotificationViewCell: ConfigurableCell
然后您可以执行以下操作。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let date = dateArray[indexPath.row]
let title = titleArray[indexPath.row]
let desc = descArray[indexPath.row]
var cell: ConfigurableCell
if notificationType == 1 {
cell = tableView.dequeueReusableCell(withIdentifier: "TuvTavleViewCell") as! ConfigurableCell
} else {
cell = tableView.dequeueReusableCell(withIdentifier: "NotificationViewCell") as! ConfigurableCell
}
cell.set(date: date)
cell.set(desc: desc)
cell.set(title: title)
}
如您所见,这将使我可以在if
之外使用这些函数,但是根据您的问题的答案,我仍然没有在cell
内声明if
,它是之前宣布的。
答案 1 :(得分:0)
您需要
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let date = dateArray[indexPath.row]
let title = titleArray[indexPath.row]
let desc = descArray[indexPath.row]
if notificationType == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "TuvTavleViewCell") as! TuvTableViewCell
cell.setTitle(title: title)
cell.setDesc(desc: desc)
cell.setDate(date: date)
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "NotificationViewCell") as! NotificationViewCell
cell.setTitle(title: title)
cell.setDesc(desc: desc)
cell.setDate(date: date)
return cell
}
}
还要考虑在单元格类中包含一个configure方法并将模型传递给它,而不是具有3个数组,而要考虑具有像这样的struct模型
struct Item {
let title,desc,date:String
}