2017-06-16 2 views
0

Ich bin gerade dieser Community beigetreten, um Hilfe zu einer bestimmten Frage zu erhalten, insbesondere zur Deklaration eines Typs, der eine Vielzahl von Informationstypen in einer bestimmten Reihenfolge enthält. Für den Kontext habe ich das Codebeispiel, das ich unten verwende.Verwenden von Typalias zum Speichern einer Vorlage für ein Array

typealias Template = [String, Array<Any>, String, String]

Dies wiederum wird sowohl zum Speichern von Daten verwendet werden, und durch sie in weiteren Funktionen zum Filtern wie folgt ...

var HamburgerToppings: [String] = [] 
var Salads: [String] = [] 
let Example: [Template] = [ABC, HamburgerToppings, XY, ZZ] 
let Example2: [Template] = [DEF, Salads, GH, IJ] 
var ExampleList: [Template] = [Example, Example2] 
func DoTheThing() { 
    for Template in ExampleList { 
      if Template[0] == DEF { 
        print("SALADS!") 
      } else { 
        print("BURGERS!) 
      } 
     } 
} 

Wenn jemand herausfinden konnte, was ich falsch mache oder, wenn es eine völlig andere Erklärung gibt, die gemacht werden muss, wäre ich sehr dankbar für den Rat.

Vielen Dank, -P. OAK

Antwort

0

können Sie Tupel verwenden statt:

typealias Template = (String, Array<Any>, String, String) 
... 
let Example: Template = (ABC, HamburgerToppings, XY, ZZ) 
... 
func DoTheThing() { 
    for Template in ExampleList { 
      if Template.0 == DEF { 
        print("SALADS!") 
      } else { 
        print("BURGERS!) 
      } 
     } 
} 

Tupeln

Tupeln Gruppe mehrere Werte in einer einzigen Verbindung Wert. Die Werte innerhalb eines Tupels können von jedem Typ sein und müssen nicht vom selben Typ sein wie der jeweils andere .

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#Tuples

1

Eine feste Länge Sammlung von Werten ist ein Tupel, kein Array. Was Sie meinten, war dies (bitte Klammern beachten, keine Klammern).

typealias Template = (String, Array<Any>, String, String) 

Das heißt, ich glaube, was Sie gemeint war:

alle
typealias Template = (String, [String], String, String) 

let hamburgerToppings: [String] = [] 
let salads: [String] = [] 
let example: Template = ("ABC", hamburgerToppings, "XY", "ZZ") 
let example2: Template = ("DEF", salads, "GH", "IJ") 
let exampleList: [Template] = [example, example2] 

func doTheThing() { 
    for template in exampleList { 
     if template.0 == "DEF" { 
      print("SALADS!") 
     } else { 
      print("BURGERS!") 
     } 
    } 
} 

Sie sollten nicht ein Tupel hier verwenden, obwohl, an. Dies sollte eine Struktur wie folgt sein:

struct Template { 
    let identifier: String 
    let toppings: [String] 
    let something2: String 
    let something3: String 
} 

let hamburgerToppings: [String] = [] 
let salads: [String] = [] 
let example = Template(identifier: "ABC", toppings: hamburgerToppings, something2: "XY", something3: "ZZ") 
let example2 = Template(identifier: "DEF", toppings: salads, something2: "GH", something3: "IJ") 
let exampleList: [Template] = [example, example2] 

func doTheThing() { 
    for template in exampleList { 
     if template.identifier == "DEF" { 
      print("SALADS!") 
     } else { 
      print("BURGERS!") 
     } 
    } 
} 

Tupel neigen dazu, ziemlich unflexibel zu sein. Sie können nützlich sein für schnelle, einmalige anonyme Typen (insbesondere als Rückgabewerte), aber als Sie eine Typologie auf sie setzten, wollten Sie fast sicher eine Struktur verwenden.

+0

Vielen Dank! Das hilft sehr! –

Verwandte Themen