Вы, вероятно, хотите что-то вроде этого:
extension RawRepresentable where RawValue == String {
func toCorrectFormat() -> String {
let returnedString = // whatever
return returnedString
}
}
extension CaseIterable where Self : RawRepresentable, Self.RawValue == String {
static func getStringList() -> String {
let aArray = Array(self.allCases)
var returnedString = ""
if let last = aArray.last {
for aItem in aArray{
returnedString += "\(aItem.toCorrectFormat())\(aItem == last ? "" : ",")"
}
}
return returnedString
}
}
Теперь все готово, потому что расширение протокола вводит желаемую статическую функцию в перечисление:
enum E : String, CaseIterable {
case howdy
case byebye
}
let s = E.getStringList()
Теперь, когда вы знаете, как внедрить желаемую функциональность, вы можете переписать getStringList
гораздо лучше (цикл глупый, сравнение с last
неверно и интерполяция строк не требуется).Я думаю, что вы действительно ищете что-то вроде этого:
extension CaseIterable where Self : RawRepresentable, Self.RawValue == String {
static func getStringList() -> String {
return Array(self.allCases)
.map{$0.rawValue.uppercased()}
.joined(separator:",")
}
}