Я создаю Button
с пользовательским ButtonStyle
. Мне бы хотелось, чтобы этот стиль кнопок поддерживал два разных «появления» - прямоугольник с закругленными углами. Для этого я определил перечисление для вариантов внешнего вида и передаю его в ButtonStyle
, чтобы он мог изменять свои свойства по мере необходимости. Я столкнулся с проблемой, и я пытаюсь предоставить разные Shape
s clipShape()
. Есть ошибка времени компиляции, когда я возвращаю Shape
:
Функция объявляет непрозрачный тип возврата, но операторы возврата в своем теле не имеют соответствующих базовых типов
Какой хороший подход для устранения этой ошибки и реализации нужного появления кнопок?
struct FloatingButton: View {
enum FloatingButtonStyleType {
case circle
case roundedRectangle
}
private let image: Image
private let style: FloatingButtonStyleType
private let action: () -> ()
var body: some View {
Button(action: action) {
image
}
.buttonStyle(FloatingButtonStyle(style: style))
}
init(image: Image, style: FloatingButtonStyleType, action: @escaping () -> ()) {
self.image = image
self.style = style
self.action = action
}
}
struct FloatingButtonStyle: ButtonStyle {
let style: FloatingButton.FloatingButtonStyleType
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.padding(.all, 10)
.background(Color.black)
.clipShape(clipShape())
}
private func clipShape() -> some Shape { //FIXME: Function declares an opaque return type, but the return statements in its body do not have matching underlying types
switch style {
case .circle:
return Circle()
case .roundedRectangle:
return RoundedRectangle(cornerRadius: 5, style: .continuous)
}
}
}