作者homelife (SKY)
看板MacDev
标题[问题] SwiftUI的Missing argument问题
时间Fri Mar 11 21:33:15 2022
最近初学SwiftUI,常遇到这个问题,看了一些文章还是不太理解
以我的理解,只要有变数是会在var body: some View当中用到的话,
预设的struct ContentView_Previews就会要求提供变数
举例:
struct ContentView: View {
@State var testString: String
var body: some View {
Text("\(testString)")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
//Error: Missing argument for parameter 'testString' in call
}
}
上面ContentView()的地方会出错
但常常testString或是其他会用到的变数是在跑程式的过程才会决定,简单的解法就是
硬塞一个变数让它可以Build,像是ContentView(testString = "")
但是有时候用到的变数比较复杂,也许是一个结构较大的Struct,此时这个解法就
没用了
想请问ContentView一定需要变数先有值的原因是什麽呢?
也想请问如果变数结构复杂但尚未预先有值的话,该怎麽写才是比较正确的方式呢?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.235.248.175 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1647005597.A.C99.html
1F:推 ID3238: 你的State需要初始状态,不然code怎麽跑 211.76.47.143 03/12 14:08
2F:→ ID3238: 不然就是初始值用optional type, 设为 nil 211.76.47.143 03/12 14:09
3F:推 s001582000: 诚心希望SwiftUI推不动 害怕进步的老 27.52.106.44 03/12 14:32
4F:→ s001582000: 人只会用UIKit 27.52.106.44 03/12 14:32
5F:推 Fantasylolz: SwiftUI已经慢慢开始变成未来主领了 49.217.139.24 03/13 00:42
6F:→ Fantasylolz: ,虽然还是需要一段时间完善UIKit才 49.217.139.24 03/13 00:42
7F:→ Fantasylolz: 能做到的事情,但是未来应该是会取代 49.217.139.24 03/13 00:42
8F:→ Fantasylolz: 掉UIkit 49.217.139.24 03/13 00:42
9F:推 tomhawkreal: 对 目前就是UIKit替代元件还不太够 36.226.148.89 03/31 09:20
10F:→ tomhawkreal: 等全部到齐 通常就是鼓励整个换掉 36.226.148.89 03/31 09:20
11F:→ tomhawkreal: 毕竟SwiftUI的reactive模式比较进步 36.226.148.89 03/31 09:21
12F:→ tomhawkreal: 而且现在预览也做的不错 36.226.148.89 03/31 09:22
13F:→ tomhawkreal: 老人会头痛 是因为重新学习需要时间 36.226.148.89 03/31 09:24
14F:→ tomhawkreal: 万一case要求 那个时间压力更大 36.226.148.89 03/31 09:24