Swift中的数组到字符串,stringInterpolationSegment

时间:2015-04-12 18:09:23

标签: swift

我正在尝试将一个枚举数组转换为Swift中的字符串。我的枚举是可打印的并且有描述属性。

我认为这样可行:

", ".join(a.map { String($0) }) 

但编译器抱怨

Missing argument label 'stringInterpolationSegment:' in call

所以,我遵循这个建议,

", ".join(a.map { String(stringInterpolationSegment: $0) })

但我不明白:

  1. 为什么需要参数标签?
  2. stringInterpolationSegment的类型是什么?

2 个答案:

答案 0 :(得分:3)

您无法使用枚举类型调用String初始化程序,因为没有采用该类型的初始化程序。

String有许多具有stringInterpolationSegment参数的初始值设定项,它们各自为不同的类型实现它。类型包括BoolFloatIntCharacter等。当所有其他方法都失败时,会有一个通用的后备:

/// Create an instance containing `expr`\ 's `print` representation
init<T>(stringInterpolationSegment expr: T)

这是为您的枚举调用的版本,因为它不是受支持的类型之一。

注意,您还可以执行以下更简洁的操作:

", ".join(a.map { toString($0) })

你可以跳过闭包表达式(感谢指出@Airspeed Velocity):

", ".join(a.map(toString))

答案 1 :(得分:1)

正如@vacawama指出的那样,错误信息有点像红色鲱鱼,您可以使用maptoString进行转换。

但不错的是,如果你已经实现了Printable,那么数组的Printable实现也将使用它,所以你可以toString(a)来获得类似的输出