使用typealias来保存数组的模板

时间:2017-06-16 03:10:20

标签: swift

我真的只是加入了这个社区来获取一个特定问题的帮助,特别是如何声明一个按特定顺序包含各种信息类型的类型。对于上下文,我有我在下面使用的代码示例。

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

2 个答案:

答案 0 :(得分: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)

您可以改为使用元组:

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