我試圖使用SwiftUI創建一個井字游戲,但每當我試圖讓代碼運行時,Simulator就會崩潰。以下是我的代碼:
import SwiftUI
struct ContentView。View {
@State private var allMarks: Array? = [nil, nil, nil, nil, nil, nil, nil, nil, nil]
var body。some View {
HStack(內容。{
ForEach(1...< 3) { i in
VStack(內容。{
ForEach(1...< 3) { i in
ZStack(內容。{
RoundedRectangle(cornerRadius: 12.0, style: .continuous)
.aspectRatio(contentMode: .fit)
.foregroundColor(Color(UIColor.systemGroupedBackground)
.onTapGesture {
if allMarks?[i] == nil {
allMarks?[i] = "circle"
var randomCell = allMarks?.randomElement()
repeat {
randomCell = allMarks?.隨機元素()
} while randomCell == nil
randomCell = "xmark"/span>
}
}
Image(systemName: allMarks?[i] as! String)
})
}
})
}
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我試著去掉ForEach并將ZStack的內容粘貼到其他兩次,然后再將所述ZStack粘貼兩次,它沒有崩潰,所以我認為是ForEach導致的問題。我不確定想,因為它也崩潰了幾次,甚至在我完全洗掉ForEach之后。誰能幫我找出問題所在,以及我能做些什么來解決它呢?
uj5u.com熱心網友回復:
這就是導致你的代碼崩潰的原因:
Image(systemName: allMarks? [i] as! String)
你正在下轉換一個可選的值,回傳nil。
為了解決這個問題,你需要首先確保該值是一個String,然后你可以在你的Image視圖中安全地使用它。
所以將其改為:
if let imageName = allMarks? [i] as? String {
Image(systemName: imageName)
更多資訊,請查看https://developer.apple.com/swift/blog/?id=23
uj5u.com熱心網友回復:
用下面的代碼改變你的影像,因為你試圖解開一個nil值作為! 字串,這樣應用程式就會崩潰。如果你定義它可能是nil,并給出一個默認的String,沒有分配給任何SF符號,它將是空的。
Image(systemName: allMarks? [i] as? String ? ")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/307963.html
標籤:
