簡體   English   中英

將函數外包給 SwiftUI 中的單獨結構

[英]Outsource function to a separate struct in SwiftUI

由於我剛剛開始使用 Swift 進行編程,因此我有以下(可能非常愚蠢)的問題:我想將函數tick外包到一個單獨的結構中,但不知道如何做到這一點。 這甚至可能嗎?

struct Ticks{
    
}

struct ContentView: View {

func tick(at tick: Int) -> some View {
    HStack {
        Rectangle()
            .fill(Color.primary)
            .opacity(tick % 20 == 0 ? 1 : 0.4)
            .frame(width: tick % 4 == 0 ? 15 : 7, height: 2)
        
        Spacer()
    }.rotationEffect(Angle.degrees(Double(tick)/240 * 360))
}
    
    var body: some View {
       
        ZStack {
            ForEach(0..<60*4) { tick in
                self.tick(at: tick)
            }
            .padding(.horizontal, 10.0)
        }
    }
}

由於該函數不使用任何實例屬性,您可以將其設為靜態並將其按原樣移動到 Ticks 結構

struct Ticks{
    static func tick(at tick: Int) -> some View {
        HStack {
            Rectangle()
                .fill(Color.primary)
                .opacity(tick % 20 == 0 ? 1 : 0.4)
                .frame(width: tick % 4 == 0 ? 15 : 7, height: 2)

            Spacer()
        }.rotationEffect(Angle.degrees(Double(tick)/240 * 360))
    }
}

然后從另一個視圖訪問它

ForEach(0..<60*4) { tick in
    Ticks.tick(at: tick)
}

只需將Ticks轉換為另一個View ,然后從原始視圖中重用它。 沒有比這更像 SwiftUI 的了。

struct Ticks: View {
    let tick: Int

    var body: some View {
        HStack {
            Rectangle()
                .fill(Color.primary)
                .opacity(tick % 20 == 0 ? 1 : 0.4)
                .frame(width: tick % 4 == 0 ? 15 : 7, height: 2)
        
            Spacer()
        }.rotationEffect(Angle.degrees(Double(tick)/240 * 360))
    }
}

struct ContentView: View {
    var body: some View {      
        ZStack {
            ForEach(0..<60*4) { tick in
                Tick(tick: tick)
            }
            .padding(.horizontal, 10.0)
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM