以下2行有啥区别? [复制]

Posted

技术标签:

【中文标题】以下2行有啥区别? [复制]【英文标题】:What is difference between below 2 lines? [duplicate]以下2行有什么区别? [复制] 【发布时间】:2018-05-08 11:43:53 【问题描述】:

我正在尝试在 cellForRowAt indexPath 方法中添加代码,如下所示

cell.itemNameLabel.text = nameArray[indexPath.row]

但它显示错误为Cannot assign value of type 'Any' to type 'String?'

所以可以通过以下两种方式解决,

cell.fruitName.text = fruitArray[indexPath.row] as? String

cell.fruitName.text = (fruitArray[indexPath.row] as! String)

所以,我的问题是 2 个答案有什么区别?

【问题讨论】:

您可以解开可选值,例如: if let name = fruitArray[indexPath.row] as?字符串 cell.fruitName.text = name 【参考方案1】:
cell.fruitName.text = fruitArray[indexPath.row] as? String

上面的返回类型是可选值。表示如果数组不包含字符串值,则返回nil值。

cell.fruitName.text = (fruitArray[indexPath.row] as! String)

以上返回类型是非可选值。表示如果数组不包含字符串值,则会触发致命错误

【讨论】:

是的。我更新了我的答案【参考方案2】:

以下是所有选项的通用信息。请找到它。

当您使用! 并且fruitArray[indexPath.row]nil 时,它会触发运行时错误,但如果使用?,它将正常失败。

您可以在Apple document找到更多详细信息

【讨论】:

所以 cell.fruitName.text = (fruitArray[indexPath.row] as!String) 是更好的使用方式吗? @NikitaPatil 不,强制换行意味着如果它是nil,它将崩溃。在打开包装之前检查价值总是更好的。 我已经说过,如果它不是零,更好的解决方案是在使用之前检查 if let OP 没有使用!,他们使用的是as!。那是强制施放,与强制展开略有不同。 let x = "x" as! Int 将崩溃,因为“x”不能转换为 Int。

以上是关于以下2行有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

substr 和 substring 有啥区别? [复制]

这两者有啥区别? [复制]

效率 ?这些代码之间有啥区别吗? [复制]

使用 int[][] 和 int[,] 有啥区别? [复制]

num=+10 和 num+=10 有啥区别? [复制]

Git diff 提交范围中的双点“..”和三点“...”有啥区别? [复制]