【问题标题】:How do I create an array of tuples in Swift where one of the items in the tuple is optional?如何在 Swift 中创建一个元组数组,其中元组中的一项是可选的?
【发布时间】:2014-11-14 07:53:17
【问题描述】:

取以下代码:

var tupleArray: [(firstName: String, middleName: String?)] = []
tupleArray.append(firstName: "Bob", middleName: nil)
tupleArray.append(firstName: "Tom", middleName: "Smith") // causes an error

我想要一个由名字和中间名组成的元组数组,中间名可以是 nil 或有一个值(因此是可选的)。但是,使用上面的创建代码,第三行给了我一个错误。为什么?我该如何解决这个问题?

【问题讨论】:

    标签: swift tuples


    【解决方案1】:

    这可能是编译器错误。如How do I create an array of tuples?, 您可以定义类型别名作为解决方法:

    typealias NameTuple = (firstName: String, middleName: String?)
    
    var tupleArray: [NameTuple] = []
    tupleArray.append( (firstName: "Bob", middleName: nil) )
    tupleArray.append( (firstName: "Tom", middleName: "Smith") )
    

    【讨论】:

    • 我可能会更进一步说,如果您要使用具有命名值的元组,您不妨选择一个完整的结构,这样就不需要类型别名。 middleName 甚至可以默认为 nil,这允许更整洁的初始化程序。
    【解决方案2】:

    另一种解决方法是显式设置Optional<String>.Some

    var tupleArray: [(firstName: String, middleName: String?)] = []
    tupleArray.append(firstName: "Bob", middleName: nil)
    tupleArray.append(firstName: "Tom", middleName: .Some("Smith"))
    

    【讨论】:

      【解决方案3】:

      一些有趣的东西。这似乎是一些错误,但我们可以使用其他语法尝试使用以下方式添加

      var pfc : [(prime: Int, count: Int)] = []
      
      pfc.append(prime: 2, count: 2)
      
      pfc += [(prime: 3, count: 4)]
      
      var p = 5
      var c = 1
      
      var tuple = (prime: p, count: c)
      
      pfc += [tuple]
      

      对于可选变量,请通过以下代码 (originally provided by Martin R) 对我来说效果很好

          typealias tupleArray =  (firstName: String, middleName: String?)
      
          var fun1: [tupleArray] = [tupleArray]()
          fun1.append((firstName: "Bob", middleName: nil))
          fun1.append((firstName: "Tom", middleName: "Smith"))
          println(fun1)
      

      【讨论】:

      • 很高兴您编辑您的答案以包含其他人的解决方案。
      • 你不能只复制别人的答案而不注明出处。我已经编辑了上面的内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 2023-03-30
      • 2013-11-02
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多