2015-04-12 13 views
4

我想將枚舉數組轉換爲Swift中的字符串。我的枚舉是可打印的並且有一個描述屬性。數組轉換爲Swift中的字符串,stringInterpolationSegment

我想這會工作:

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

但是編譯器會抱怨

Missing argument label 'stringInterpolationSegment:' in call 

所以,我按照建議,

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

但我不明白:

  1. 爲什麼需要參數標籤?
  2. 什麼是stringInterpolationSegment的類型?

回答

3

您不能使用枚舉類型調用String初始值設定項,因爲沒有使用該類型的初始值設定項。

String有幾個初始值設定項,它們有stringInterpolationSegment參數,它們各自爲不同的類型實現它。這些類型包括Bool,Float,IntCharacter等等。當一切都失敗了,有一個通用的回退:

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

這是被稱爲你的枚舉,因爲它是不支持的類型的版本。

注意,你也可以做以下哪個更簡潔:

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

,您可以跳過閉合式(感謝指出了這一點@Airspeed速度):

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

您可以跳過閉包表達式:'「,」.join(a.map(toString))'。 –

+0

感謝您的詳細解答! –

1

由於@vacawama指出,錯誤信息是一個紅色的鯡魚,你可以使用maptoString來轉換它。

但是,如果你已經實現了Printable,那麼數組的實現Printable也將使用它,所以你可以只做toString(a)來獲得類似的輸出。

+0

OP表示他的枚舉是Printable並具有描述屬性。 – vacawama

+0

哎呀錯過了我的壞! –

+0

如果你不介意括號內有''和'''',這個效果很好。 – vacawama