Swift:如何在使用带元组的println时更好地格式化输出?

时间:2014-08-18 08:01:37

标签: swift tuples xcode6-beta5

我已定义此功能:

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

2 个答案:

答案 0 :(得分:2)

有一种方法可以使用元组索引提取值,但它并不好,它涉及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()

答案 1 :(得分:1)

使用.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())")