将swift类型转换为相同类型,为什么这样做?

时间:2016-03-20 14:19:47

标签: ios arrays swift casting

为什么以下行在swift中编译并工作?

employeeListing.text = (jumperCablesRoles[row] as! [String] as [String]).joinWithSeparator("...")

看来我正在将一个字符串数组转换为一个字符串数组,我认为这是完全相同的。它有效,但我不知道为什么,有人可以解释一下吗?

1 个答案:

答案 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.