2017-06-16 60 views
0

我真的剛加入這個社區以獲得一個特定問題的幫助,特別是如何聲明一個包含特定順序的各種信息類型的類型。對於上下文,我有下面使用的代碼示例。使用typealias爲數組保存模板

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

反過來,這將既用來存儲數據,並進一步通過功能來過濾如下...

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

如果有人可以找出我做錯了,或者如果需要提出完全不同的聲明,我將非常感謝這些建議。

非常感謝, -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!") 
     } 
    } 
} 

元組往往是相當不靈活。它們可以用於快速的一次性匿名類型(特別是作爲返回值),但是當你在它們上面放置一個typealias時,你幾乎肯定會使用一個struct。

+0

謝謝!這有助於很多! –