zoukankan      html  css  js  c++  java
  • SwiftUI:如何避免在GeometryReader中使用大量的 self.

    思路就是把 body 代码封装进一个成员函数。

    (斯坦福老头子在swfitui课程中推荐)

    当你是把已有的body代码放入 GeometryReader { } 时,就更能体会到这个技巧的好处,它可以帮你避免为已有代码补充大量的 self.

    代码示例

    原代码:

    let cornerRadius: CGFloat = 10.0
    let edgeLineWidth: CGFloat = 3
    let fontScaleFactor: CGFloat = 0.75
    
    var body: some View {
    	GeometryReader { geometry in
    		ZStack {
    			if card.isFaceUp {
    				RoundRectangle(cornerRadius: self.cornerRadius).fill(Color.white)
    				RoundRectangle(cornerRadius: self.cornerRadius).stroke(lineWidth: self.edgeLineWidth)
    				Text(card.content)
    			} else {
    				RoundRectangle(cornerRadius: self.cornerRadius).fill()
    			}
    		}
    		.font(Font.system(size: min(size.width, size.height) * self.fontScaleFactor))
    	}
    }
    

    优化后的代码:

    let cornerRadius: CGFloat = 10.0
    let edgeLineWidth: CGFloat = 3
    let fontScaleFactor: CGFloat = 0.75
    
    var body: some View {
    	GeometryReader { geometry in
    		self.body(for: geometry.size)
    	}
    }
    
    func body(for size: CGSize) -> some View {
    	ZStack {
    		if card.isFaceUp {
    			RoundRectangle(cornerRadius: cornerRadius).fill(Color.white)
    			RoundRectangle(cornerRadius: cornerRadius).stroke(lineWidth: edgeLineWidth)
    			Text(card.content)
    		} else {
    	       RoundRectangle(cornerRadius: cornerRadius).fill()
    		}
    	}
    	.font(Font.system(size: min(size.width, size.height) * fontScaleFactor))
    }
    	
    
  • 相关阅读:
    BZOJ3391: [Usaco2004 Dec]Tree Cutting网络破坏
    python总结二
    python总结一
    评论详解
    C++入门篇十三
    C++入门篇十二
    C++入门篇十一
    C++入门篇十
    C++入门篇九
    c++入门篇八
  • 原文地址:https://www.cnblogs.com/ZJT7098/p/13986852.html
Copyright © 2011-2022 走看看