小编and*_*824的帖子

如何在 SwiftUI 中提供自定义 ButtonStyle 附加选项

我目前有一个 ButtonStyle 定义如下:

struct RoundedButtonRed: ButtonStyle {
  func makeBody(configuration: Configuration) -> some View {
    HStack {
      Spacer()
      configuration.label.foregroundColor(.white)
      Spacer()
    }
    .padding()
    .background(Color.red.cornerRadius(13.0))
    .scaleEffect(configuration.isPressed ? 0.85 : 1)
  }
}
Run Code Online (Sandbox Code Playgroud)

我还有另一个 struct ( RoundedButtonBlack) ,它有一个.background(Color.black.cornerRadius(13.0)),这似乎是不必要的代码重复。有没有办法添加自定义配置选项,以便我可以对不同的颜色使用相同的结构?

例如

struct RoundedButtonRed: ButtonStyle {
  func makeBody(configuration: Configuration) -> some View {
    HStack {
      Spacer()
      configuration.label.foregroundColor(.white)
      Spacer()
    }
    .padding()
    .background(configuration.backgroundColor) // background color taken from configuration or passed into .buttonStyle(RoundedButton()) call
    .scaleEffect(configuration.isPressed ? 0.85 : 1)
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,也许还有更好的方法?

ios swift swiftui

4
推荐指数
1
解决办法
1804
查看次数

如何使用通用接口将 JSON 解组为字段

我有一个具有以下结构的通用 Response 对象:

type Response struct {
    Data          Data   `json:"data"`
    Error         string `json:"error,omitempty"`
    NextPageToken string `json:"next_page_token,omitempty"`
}

Run Code Online (Sandbox Code Playgroud)

Data类型是一个接口,具有许多实现(例如 PingResponse 等)。如何将 解组Response到其基础类型中?完整的示例如下,它总是触发错误error: json: cannot unmarshal object into Go struct field Response.data of type main.Data

type Response struct {
    Data          Data   `json:"data"`
    Error         string `json:"error,omitempty"`
    NextPageToken string `json:"next_page_token,omitempty"`
}

type Data interface{
    Foo()
}

type TypeA struct {
    Field1 string `json:"field1"`
    Field2 int    `json:"field2"`
}

func (a *TypeA) Foo() {}

type TypeB struct {
    Field3 float64 …
Run Code Online (Sandbox Code Playgroud)

json go unmarshalling

1
推荐指数
1
解决办法
409
查看次数

标签 统计

go ×1

ios ×1

json ×1

swift ×1

swiftui ×1

unmarshalling ×1