我正在尝试将Swift 1.2转换为2.0,但我遇到问题,分配tablviewCell表格dequeueReusableCellWithIdentifier:
var cell:UITableViewCell? = tableview!.dequeueReusableCellWithIdentifier(identifier as String) as? UITableViewCell;
if (cell == nil)
{
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: identifier as String)
cell?.backgroundColor = UIColor.clearColor()
}
错误:
Downcast表单UITableViewCell到UITableViewcell只能解包 选项,你的意思是使用'!'?
我相信func dequeueReusableCellWithIdentifier不会返回可选项,所以我尝试过:
var cell:UITableViewCell = tableview.dequeueReusableCellWithIdentifier(identifier as String)
if (cell == nil){
...
我得到两个错误:
可选类型tableview的值未解包,你的意思是使用! 二进制运算符不能应用于UITableViewCEll类型的操作数 和Niliretalconversion。
赞赏任何输入
答案 0 :(得分:1)
如果您确定,该演员表是正确的,那么您可以这样做:
var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifer as String) as UITableViewCell!;
if (cell == nil)
{
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: identifer as String)
cell?.backgroundColor = UIColor.clearColor()
}
如果你不确定演员阵容绝对不是零,你可以这样做:
var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier(identifer as String) as? UITableViewCell?;
请注意,在这种情况下,您不应明确标识cell
参数的类型,因为Swift会自动推断它。
答案 1 :(得分:1)
dequeueReusableCellWithIdentifier
返回UITableViewCell?
。您尝试将其转换为非可选(as? UITableViewCell
),但随后将其分配回可选(cell:UITableViewCell?
)。你没有从这项额外的工作中获得任何信息,并且可能使用了更简单的等效表达式。你最初的警告似乎是由于这种令人困惑的被忽视的演员而造成的。
var cell:UITableViewCell? = tableview!.dequeueReusableCellWithIdentifier(identifier as String)
我们知道cell
的类型,因为它与dequeueReusableCellWithIdentifier
的返回类型匹配,所以我们可以写:
var cell = tableview!.dequeueReusableCellWithIdentifier(identifier as String)
我无法说明identifier
的类型是什么,但as
建议可以始终成功转换为String
,因此您可以进一步简化为:< / p>
var cell = tableview!.dequeueReusableCellWithIdentifier(identifier)
使用if let
或guard
分配可能会进一步简化整个条件,但如果不知道调用它的较大上下文,则很难确定。