我目前有一个 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)
或者,也许还有更好的方法?
我有一个具有以下结构的通用 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)