Arrays 在将元组数组传递到函数中时,我是否可以减少重复的Swift代码的数量?

Arrays 在将元组数组传递到函数中时,我是否可以减少重复的Swift代码的数量?,arrays,swift,tuples,Arrays,Swift,Tuples,我正在为Swift的入门作业编写代码。我使用一个元组数组作为函数的输入,然后返回一个包含一些相同元组的数组 根据我目前对Swift的了解,我需要连续三次声明元组数组。我需要声明函数的输入,声明函数将返回什么,还需要声明一个空数组来追加值并返回 这似乎是相当多余的。如果我一直在使用元组,有没有办法重写它,这样我就不必复制和粘贴代码三次 我猜真正的答案是使用类、结构或对象之类的东西,而不是元组,但我对Swift还不太了解 func findCleanAgents(agents: [(coverNam

我正在为Swift的入门作业编写代码。我使用一个元组数组作为函数的输入,然后返回一个包含一些相同元组的数组

根据我目前对Swift的了解,我需要连续三次声明元组数组。我需要声明函数的输入,声明函数将返回什么,还需要声明一个空数组来追加值并返回

这似乎是相当多余的。如果我一直在使用元组,有没有办法重写它,这样我就不必复制和粘贴代码三次

我猜真正的答案是使用类、结构或对象之类的东西,而不是元组,但我对Swift还不太了解

func findCleanAgents(agents: [(coverName: String, realName: String, accessLevel: Int, compromised: Bool)])
    -> [(coverName: String, realName: String, accessLevel: Int, compromised: Bool)] {
        var cleanAgents = [(coverName: String, realName: String, accessLevel: Int, compromised: Bool)]()
        for agent in agents {
            if agent.compromised == false {
                print("\(agent.coverName) isn't compromised.")
                cleanAgents.append(agent)
            }
        }
        return cleanAgents
}
您可以使用typealias,它完全按照其功能命名:类型的别名:

typealias AgentTuple = (coverName: String, realName: String, accessLevel: Int, compromised: Bool)

func findCleanAgents(agents: [AgentTuple]) -> [AgentTuple] {
  var cleanAgents: [AgentTuple] = []
  for agent in agents {
    if agent.compromised == false {
       print("\(agent.coverName) isn't compromised.")
       cleanAgents.append(agent)
    }
  }
}

这是斯威夫特的

元组最适合于返回多个值的函数。它们真的不方便传递

在您的情况下,如果这四种数据类型通常在一起,请考虑创建一种新的类型:

struct Agent {
  var coverName: String
  var realName: String
  var accessLevel: Int
  var compromised: Bool
}

let agent = Agent(coverName: "Arlington Beech", realName: "James Bond", ...)