我完全不理解为什么 SwiftUI 要支持这种写法:让一个 view 去调用自己根本不存在的属性,还能"生效"。比如 .navigationTitle
------本来应该是页面级别的东西,结果你随便在一个 Text
、Button
上写,它都能改导航栏标题。 但哪个生效?完全不确定。
我写了段hello world 级别的代码,任何子 view 都能 .navigationTitle("xxx"),你猜猜最终会显示什么?
我问了好几个 AI,全军覆没,一个都没答对。
css
struct AddView: View {
var body: some View {
ScrollView{
VStack{
Button(action: {}, label: {
Text("button")
.foregroundColor(.white)
.frame(height: 30)
.frame(maxWidth: .infinity)
.background(Color.accentColor)
.cornerRadius(10)
.navigationTitle("title1")
})
.navigationTitle("title2")
Text("text")
.navigationTitle("title3")
}.padding(15)
.navigationTitle("title4")
}.navigationTitle("title5")
}
}
#Preview {
NavigationStack{
AddView()
}
}
好了,揭示结果
最终的 title 如图所示,显示的是 title1
更离谱的是,这还不是个例。不光是 .navigationTitle,很多 SwiftUI 的 写法 都存在类似问题:表面上修饰局部,其实是全局冒泡,导致歧义、结果不直观,维护起来还埋坑。
这种设计到底是为了所谓的"灵活",还是偷懒的语法糖?无论如何,带来的体验只有一个词能形容:迷惑。
或许有人会说:"你别这样写不就行了?" 但问题是 ------ SwiftUI 本来就允许这样写。项目一旦复杂起来,或者多人合作,甚至是接手别人代码的时候,你根本无法确保没人这么用。一旦遇到问题,调试起来极其困难。
而且最最最大的问题是:AI 根本帮不了你。 都 2025 年了,这么一小段 SwiftUI 代码,AI 仍然无法稳定分析对错。你敢想?别人写其他代码的遇到问题 AI 一补全,分分钟下班。你写 SwiftUI,遇到个小 bug,谁都帮不了你 ------ AI 不行,群里的老哥大多数也不懂 SwiftUI,最后只能自己一个人摸黑查,个人小项目无所谓,公司项目 你不完全摸清你能下班?
你以为的 SwiftUI 是「比 UIKit 少写 30%-50% 代码,开发效率高很多」,实际体验却是:2 小时飞机 vs 4 小时高铁。 飞机看似快,但你得提前很久到机场,机场又远在郊区,安检、候机、延误......加起来,可能还不如稳稳当当坐高铁四小时。2 小时飞机 只有对比 8 小时以上高铁 才算是有优势。 SwiftUI 就是这样 ------看似优雅省事,实际暗坑重重,会更折腾。
我也真不懂,为什么会有人劝新人入坑就直接学 SwiftUI,还能一脸轻松地说"SwiftUI 简单"。说简单的,大概率都是已经熟悉过 UIKit、或者其他端老程序员吧。 你确定一个新人能看懂 SwiftUI 这一堆花里胡哨的语法糖?
更现实的是,只学 SwiftUI 能找到工作的概率基本为 0。就算运气好进了公司,接手的项目十有八九还是 UIKit 的。所以如果是以找工作为目的入坑 iOS,优先建议学 UIKit,SwiftUI 顶多是锦上添花。
别的不说,光是游戏开发,ios 端的工程几乎和 swiftui 无关,甚至还是 Objective-C 的老代码,这个绕不过去。
下面是 ai 阵亡案发现场
GPT5

Gemini

QWEN

Deepseek
