我正在尝试在调用dequeueReusableCellWithIdentifier时将UITableViewCell强制转换为其子类。这就是我现在怎么做的:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let dogs = DBManager.getAllDogs()
let dog = dogs[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier(Constants.dogViewCellReuseIdentifier,
forIndexPath: indexPath) as! DogViewCell
cell.configureWithDog(dog)
return cell
}
然而,这种方法使用了丑陋的强制演员。所以我提出了这种方法,而不是Swifty:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let dogs = DBManager.getAllDogs()
let dog = dogs[indexPath.row]
if let cell = tableView.dequeueReusableCellWithIdentifier(Constants.dogViewCellReuseIdentifier,
forIndexPath: indexPath) as? DogViewCell {
cell.configureWithDog(dog)
return cell
} else {
return tableView.dequeueReusableCellWithIdentifier(Constants.dogViewCellReuseIdentifier,
forIndexPath: indexPath)
}
}
我不喜欢这种方法,因为我正在编写更多代码以避免使用'!'强制展开可选演员。
这样做的正确和优雅方式是什么?
答案 0 :(得分:2)
问问自己:你是否宁愿在开发过程中崩溃,在确切的线路上告诉你问题在哪里,或者有些奇怪的行为,看起来有些奇怪,但你还不清楚为什么。
在您的问题中,如果您错误地配置了单元格或情节提要,那么您只会崩溃。这不是用户或Web服务会为您搞砸的事情。
使用!,进行一些测试,以便您知道自己没有搞砸配置。当你搞砸了开发过程中的崩溃是有用的。