我正在尝试将一个枚举数组转换为Swift中的字符串。我的枚举是可打印的并且有描述属性。
我认为这样可行:
", ".join(a.map { String($0) })
但编译器抱怨
Missing argument label 'stringInterpolationSegment:' in call
所以,我遵循这个建议,
", ".join(a.map { String(stringInterpolationSegment: $0) })
但我不明白:
答案 0 :(得分:3)
您无法使用枚举类型调用String
初始化程序,因为没有采用该类型的初始化程序。
String
有许多具有stringInterpolationSegment
参数的初始值设定项,它们各自为不同的类型实现它。类型包括Bool
,Float
,Int
和Character
等。当所有其他方法都失败时,会有一个通用的后备:
/// 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指出的那样,错误信息有点像红色鲱鱼,您可以使用map
和toString
进行转换。
但不错的是,如果你已经实现了Printable
,那么数组的Printable
实现也将使用它,所以你可以toString(a)
来获得类似的输出