为什么以下行在swift中编译并工作?
employeeListing.text = (jumperCablesRoles[row] as! [String] as [String]).joinWithSeparator("...")
看来我正在将一个字符串数组转换为一个字符串数组,我认为这是完全相同的。它有效,但我不知道为什么,有人可以解释一下吗?
答案 0 :(得分:0)
使用您的代码确定几点:
首先,jumperCablesRoles[row] as! [String]
是Swift中的一个潜在危险行为,因为你强行解包(强制转换)jumperCablesRoles[row]
作为一个字符串数组。详细了解如何保存小马here。
更好的解决方案是:
if let role = jumperCablesRoles[row] as? [String] {
employeeListing.text = role.joinWithSeparator("...") // role is guaranteed to be an Array of Strings. Safe to operate on it.
} else {
// jumperCablesRoles[row] is not an array of strings, handle so here.
}
这会检查jumperCablesRoles[row]
是一个实际的字符串数组而不会爆炸,如果不是,你可以处理它。
要停止投射,您还可以指定jumperCablesRoles
的类型,如下所示:
jumperCablesRoles: [[String]] = []
这样您就可以直接使用jumperCablesRoles
:
employeeListing.text = jumperCablesRoles.joinWithSeparator("...")
其次,回答关于将字符串数组转换为字符串数组(... as! [String] as [String]
)的问题。你用这行代码基本上说的是:
let role = jumperCableRoles[row] as! [String] // role is an Array of Strings
let role2 = role as [String] // Specifying an object as an Array of Strings when it already is an Array of Strings. Which is trivial.