【问题标题】:Breaking up expression to sub-expressions将表达式分解为子表达式
【发布时间】:2020-02-09 08:25:24
【问题描述】:

如果我编写以下代码,我会收到以下错误消息:

编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式

如果我删除 if/else 语句,它会起作用。但我想先显示价值或货币,具体取决于货币。那么你将如何分解这段代码呢?

 if item.currency == "%" {

      Text(item.currency)
           .font(.system(size: 14, design: .rounded))
           .padding(.bottom, 0)
           .frame(width: 100, alignment: .center)

      Text(item.value)
           .font(.system(size: 24, design: .rounded))
           .fontWeight(.heavy)
           .frame(width: 100, alignment: .center)

 } else {

      Text(item.value)
           .font(.system(size: 24, design: .rounded))
           .fontWeight(.heavy)
           .frame(width: 100, alignment: .center)

      Text(item.currency)
           .font(.system(size: 14, design: .rounded))
           .padding(.bottom, 0)
           .frame(width: 100, alignment: .center)

 }

【问题讨论】:

    标签: swift xcode swiftui


    【解决方案1】:

    如果我使用提供的快照作为视图body 的唯一内容,则没有错误,因此我认为它是更复杂的视图层次结构的一部分。对于这种情况,我更喜欢将这种结构分解为显式视图属性,如下例所示

    var body: some View {
        ItemCurrencyView // << usage
    }
    
    private var ItemCurrencyView: some View { // < separated view builder
        Group {
            if item.currency == "%" {
    
                Text(item.currency)
                    .font(.system(size: 14, design: .rounded))
                    .padding(.bottom, 0)
                    .frame(width: 100, alignment: .center)
    
                Text(item.value)
                    .font(.system(size: 24, design: .rounded))
                    .fontWeight(.heavy)
                    .frame(width: 100, alignment: .center)
    
            } else {
    
                Text(item.value)
                    .font(.system(size: 24, design: .rounded))
                    .fontWeight(.heavy)
                    .frame(width: 100, alignment: .center)
    
                Text(item.currency)
                    .font(.system(size: 14, design: .rounded))
                    .padding(.bottom, 0)
                    .frame(width: 100, alignment: .center)
            }
        }
    }
    

    作为变体,它也可以是一个函数 ItemCurrencyView,如果愿意的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多