Sagen, ich habe zwei Arrays:Casting-Arrays auf bestimmte Arten in Swift
var exterior: Array<(name: String, value: (code: Code, pass: Bool))> = []
var interior: Array<(name: String, value: (code: Code, type: Type, pass: Bool))> = []
Ich habe eine UISegmentedControl, die je nach dem Segment ausgewählt wird, werden die Daten aus dem jeweiligen Array zeigen. Zur Reduzierung der vorformulierten, würde Ich mag ein fuction für das Setup verwenden:
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...
}
}
}
}
Das wird nicht funktionieren, da ich nicht in ein Array umwandeln kann, die Any
hält. Wenn ich den Typ von beiden und exterior
zu Any
ändere und versuche, sie zu ihren jeweiligen Typen zu verkleiden, erhalte ich einen Fehler: can't unsafeBitCast between types of different sizes
. Was sind meine Möglichkeiten in dieser Situation?
Da die Differenz der beiden Array-Typen nur die 'Parameter sind Baumuster zur, wäre es nicht effizienter sein, die Typ-Parameter als optional zu erklären? Der Vorteil ist, dass Sie einen gemeinsamen Typ für beide Arrays haben und "exterior" durch den "nil" -Typ identifizieren können. In Swift mit 'Any' ist immer die schlechteste, schlechteste Angewohnheit, wenn ein spezifischerer Typ (mindestens' AnyObject') verwendet werden kann. – vadian