[英]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.