Рассмотрим следующий код:тип протокола не может быть реализован
protocol Color {
var color: UIColor { get }
}
struct Ball : Color {
var color: UIColor
}
let ball = Ball(color: .white)
print(ball)
Это работает, и результаты в:
Ball(color: UIExtendedGrayColorSpace 1 1)
Теперь я хотел бы сделать функцию в протоколе, что дано массив цветов, возвращает массив элементов (шары, или любой другой тип, который соответствует Color
) с этим цветом:
extension Color {
func multipleColors(colors: [UIColor]) -> [Color] {
var coloredItems = [Color]()
for item in colors {
// What do I put here ???
}
return coloredItems
}
}
, а затем:
let coloredBalls = ball.multipleColors(colors: [.red, .green, .blue])
Я не могу понять, что положить в скобки. Так, например (не каламбур), если я попробовать:
coloredItems.append(Color(color: item))
ошибка:
'Color' cannot be constructed because it has no accessible initializers
Затем я добавил метод инициализации к протоколу, а ошибка изменен на:
protocol type 'Color' cannot be instantiated
Как это исправить?
Вы пытаетесь создать экземпляр протокола 'Color (цвет: элемент)', который не возможно. – shallowThought
Итак, какие-нибудь идеи, как изменить это? – Koen
Непонятно, что именно вы ожидаете от вывода функции 'multipleColors'. Какова проблема, которую вы пытаетесь решить здесь? – Hamish