新版 SwiftUI 的 ViewBuilder 可以輸入 if let,switch & 宣告變數常數
Published in
2 min readAug 10, 2020
新版的 SwiftUI 現在可以在 ViewBuilder 裡輸入 if let,switch & 宣告變數常數了。
if let
struct ProfileView: View {
var userName: String
var imageName: String?
var body: some View {
VStack {
Text(userName)
if let imageName = imageName {
Image(imageName)
.resizable()
.scaledToFit()
}
}
}
}struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ProfileView(userName: "peter", imageName: "peter")
}
}
switch
enum Gender {
case boy, girl
}struct ProfileView: View {
var userName: String
var gender: Gender
var body: some View {
VStack {
Text(userName)
switch gender {
case .boy:
Text("👦")
case .girl:
Text("👧")
}
}
}
}struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ProfileView(userName: "peter", gender: .boy)
}
}
宣告變數常數
struct ContentView: View {
var body: some View {
HStack {
let number1 = Int.random(in: 1...6)
let number2 = Int.random(in: 1...6)
let number3 = Int.random(in: 1...6)Image(systemName: "\(number1).circle")
.resizable()
Image(systemName: "\(number2).circle")
.resizable()
Image(systemName: "\(number3).circle")
.resizable()
}
.scaledToFit() }
}
相反的,在舊版的 SwiftUI,在 ViewBuilder 宣告變數常數將產生錯誤,顯示 Closure containing a declaration cannot be used with function builder ‘ViewBuilder’。