【问题标题】:Swift: How to better format the output when using println with a tuple?Swift:使用带有元组的 println 时如何更好地格式化输出?
【发布时间】:2014-10-11 02:16:28
【问题描述】:

我已经定义了这个函数:

func need_rebalance() -> (Bool, RebalanceStrategy) {

}

其中 RebalanceStrategy 是枚举类型

enum RebalanceStrategy: String {
    case LeftRight = "LeftRight"
    case RightLeft = "RightLeft"
}

当我尝试以这种方式打印时,

    println("Need rebalance? \(self.need_rebalance())")

我得到这样的输出:

Need rebalance? (false, (Enum Value))

我的问题是:

1) 从元组中提取值是否容易? (希望类似于 python 的东西,例如 self.need_rebalance()[1]。显然这种语法在 swift 中不起作用,因为元组不支持subscript()

2) 如何打印枚举的原始值而不是 (Enum Value)

我正在使用 XCode6 Beta5

【问题讨论】:

    标签: swift tuples xcode6-beta5


    【解决方案1】:

    有一种使用元组索引提取值的方法,但是不太好,涉及到reflect

    let tuple = self.need_rebalance()
    let reflection = reflect(tuple)
    reflection[0].1.value // -> true
    reflection[1].1.value // -> RebalanceStrategy.?
    

    此外,如果您的元组成员未命名:

    let tuple = self.need_rebalance()
    tuple.0 // -> true
    tuple.1 // -> RebalanceStrategy.?
    

    要访问enum 中的原始值:

    RebalanceStrategy.LeftRight.toRaw()
    

    【讨论】:

      【解决方案2】:

      使用.0.1 等从未命名的元组中获取相应的值。

      要获取枚举的原始值,请使用.toRaw()

      var tuple = self.need_rebalance()
      
      println("Need rebalance? \(tuple.0),\(tuple.1.toRaw())")
      

      更好的是,使用这样的命名元组:

      var tuple : (boolValue : Bool, enumValue :RebalanceStrategy) = self.need_rebalance()
      
      println("Need rebalance? \(tuple.boolValue),\(tuple.enumValue.toRaw())")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 2021-05-03
        • 2013-02-21
        • 2017-09-15
        相关资源
        最近更新 更多