2017-06-16 4 views
0

私はこのコミュニティに参加して、ある特定の質問、具体的には特定の順序でさまざまな情報タイプを保持する型を宣言する方法について助けを求めました。コンテキストについては、私が使用しているコード例があります。誰もが私が間違ってやっているかを把握することができればこれは順番に...データを保存するために、次のようにさらに機能でそれをフィルタリングするタイプアリアを使用して配列のテンプレートを保持する

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!) 
      } 
     } 
} 

を両方に使用されます

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

、あるいは全く異なる宣言が必要な場合は、助言に非常に感謝します。

ありがとう、 -P。 OAKは

答えて

0

あなたは代わりにタプルを使用することができます。

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!) 
      } 
     } 
} 

タプル

タプルグループ複数の値を単一の化合物値に。タプル内の の値はどのタイプでもよく、お互いに同じタイプのものである必要はありません。

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

1

値の固定長のコレクションはタプルではない配列です。あなたが意味していたのはこれでした(かっこは括弧ではなく)。

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

言った、私はあなたがこのだった何を意味するのかと思う:あなたがすべてで、しかし、ここではタプルを使用しないでください

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!") 
     } 
    } 
} 

。これは次のような構造体でなければなりません:

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!") 
     } 
    } 
} 

タプルはかなり柔軟性がありません。これらは、素早く1回限りの匿名型(特に戻り値)には便利ですが、タイプライアントを置く頃には、構造体を使用することがほぼ確実です。

+0

ありがとうございました!これは多くの助けになります! –

関連する問題