๐Ÿ‘”ShapeStyleView

swiftโŸฉ custom โŸฉ view โŸฉ Swatch

ๅฐ‡ ShapeStyle ็•ถๆˆไธ€ๅ€‹ Viewใ€‚

๐Ÿ‘‰ ๅ‰ๆƒ…ๆ่ฆ่ซ‹ๅƒ้–ฑ๏ผš can't change builtin hierarchyใ€‚

ShapeStyleView, AnyGradient as View
import SwiftUI

// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
// โ”‚ ShapeStyleView โ”‚
// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// wrap a shape style in a view
struct ShapeStyleView<S: ShapeStyle>: View {
    
    let style: S
    
    init(_ shapeStyle: S) {
        self.style = shapeStyle
    }
    
    // `View` protocol requirement
    var body: some View {
        Rectangle().fill(style)
    }
}

// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
// โ”‚ Gradient + View โ”‚
// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// now `Gradient` is a view.
extension Gradient: View {
    public var body: some View {
        Rectangle().fill(self)
    }
}

// โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
// โ”‚ AnyGradient + View โ”‚
// โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
// now `AnyGradient` is a view.
extension AnyGradient: View {
    public var body: some View {
        Rectangle().fill(self)
    }
}

Last updated

Was this helpful?