【发布时间】:2016-05-03 15:18:51
【问题描述】:
假设我有两个数组:
var exterior: Array<(name: String, value: (code: Code, pass: Bool))> = []
var interior: Array<(name: String, value: (code: Code, type: Type, pass: Bool))> = []
我有一个 UISegmentedControl,根据选择的段,它将显示来自相应数组的数据。为了减少样板,我想使用一个函数进行设置:
func build(section: Section) {
var data: Array<Any>
switch section {
case .Exterior:
data = exterior
case .Interior:
data = interior
}
for i in 0...data.count - 1 where i % 4 == 0 {
for y in i...i + 4 {
guard y < data.count - 1 else {
break
}
switch section {
case .Exterior:
let v = data as! Array<(String, (Report.Code, Bool))>
// Do stuff here...
case .Interior:
let v = data as! Array<(String, (Report.Code, Report.Type, Bool))>
// Do stuff here...
}
}
}
}
这行不通,因为我无法转换为包含 Any 的数组。如果我将 interior 和 exterior 的类型都更改为 Any 并尝试将它们封装为各自的类型,我会收到错误:can't unsafeBitCast between types of different sizes。在这种情况下我有什么选择?
【问题讨论】:
-
既然两种数组类型的区别只是
type参数,那么将类型参数声明为可选不是更高效吗?好处是您对两个数组都有一种通用类型,并且您可以通过nil类型识别exterior。在 Swift 中使用Any总是最糟糕、最糟糕的习惯,如果可以使用更具体的类型(至少AnyObject)。
标签: swift