普通视图

发现新文章,点击刷新页面。
昨天以前首页

SwiftUI 劝退实录:AI 都无能为力,你敢用吗?

2025年8月16日 18:39

我完全不理解为什么 SwiftUI 要支持这种写法:让一个 view 去调用自己根本不存在的属性,还能“生效”。比如 .navigationTitle ——本来应该是页面级别的东西,结果你随便在一个 TextButton 上写,它都能改导航栏标题。 但哪个生效?完全不确定。
我写了段hello world 级别的代码,任何子 view 都能 .navigationTitle("xxx"),你猜猜最终会显示什么?
我问了好几个 AI,全军覆没,一个都没答对。

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()
    }
}

好了,揭示结果 image.png

最终的 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

image.png

Gemini

image.png

QWEN

image.png

Deepseek

image.png

❌
❌