一个 Swift UI 小需求,难倒一大片大模型

662 阅读3分钟

在开发一个小需求的时候,用 cursor 生成代码后,结果并不满意,选择其他 AI 作为补充,顺道把各大模型做了一下对比。

需求

这个需求是这样的:

主页面是白色的,到了内页是深色背景,顶部的导航栏字体颜色要变成白色。

导航栏需求.png

cursor 给的答案是使用 toolbar 来覆盖:

.toolbar {
  // 使用 toolbar 来设置标题颜色
  ToolbarItem(placement: .principal) {
    Text("Text Entry")
      .font(.headline) // 设置字体样式
      .foregroundColor(.white) // 设置标题颜色为白色
  }
}

等于在原有的导航栏上添加了一层 Toolbar,这对于一直有强迫症的前端来说,明显不够优雅。另外导航栏的两侧返回按钮、设置按钮,也需要写更多的代码来实现。

这里选择了国内大家常用的 文心一言、通义千问、Kimi 和 豆包,以及 ollama 上开源的 来做对比。

那我们来看看其他大模型的答案如何。

完美解决型

deepseek-coder-v2 与 通义千问

这两个大模型,都做到了复制即可使用的情况。顺利通过考验。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("Hello, World!")
                .navigationTitle("My Title")
                .navigationBarTitleDisplayMode(.inline)
        }
        .onAppear {
            let appearance = UINavigationBarAppearance()
            appearance.configureWithDefaultBackground()
            appearance.titleTextAttributes = [.foregroundColor: UIColor.red]
            
            UINavigationBar.appearance().standardAppearance = appearance
            UINavigationBar.appearance().compactAppearance = appearance
            UINavigationBar.appearance().scrollEdgeAppearance = appearance
        }
    }
}

通过 onAppear 定制了导航栏的外观,其中 appearance.titleTextAttributes = [.foregroundColor: UIColor.red] 重置了字体颜色。

一步之遥型

通义千问的开源大模型 qwen2.5-coder,略作修改即可使用。

主要做代码生成,官网号称自己遥遥领先的大模型 codestral:22b,表现也不差,同样略作修改即完成了。

AI-code-03.jpg

方向正确型

codegeex4:9b 有点难以定义,看着似乎要做对了,同样使用了重置 UINavigationBarAppearance 的方法,但是却在 Toolbar 在一顿操作,最后也没达到效果。

截屏2024-12-10 09.05.56.png

臆想型

很不幸,在 2025 年即将到来之际,还有不少大模型还有臆想的。这里有只有 9b 参数的零一模型的 yi-coder,有 13b 的 codellama 和 20b 的 granite-code,还有通过线上搜索得出答案的 Kimi。

Kimi 是让我比较疑惑的,搜索出来的链接中也没有相关的内容。

AI-code-01.jpg

其他答案

文心一言提供了另一种答案,作为小白我没有看懂,复制过去也报错了。最后放弃了该方案。虽然很好的代码注释,整体看起来非常完整。碍于本人能力问题,无法验证了。

豆包提供了三种方案,但是第一种答案不正确,第二种答案跟上面的一步之遥的大模型是一样的,第三种答案没有效果。不过还不错的是,复制粘贴过去都是没有报错的。

AI-code-02.jpg

总结

  1. iOS 的 Swift UI 开发不算是小众需求,然而各大模型的答案并不算好。

  2. 本地的开源大模型不一定比线上的大厂大模型差。最好的两个模型,一个线上一个本地。

    •     deepseek-coder-v2 的确如所宣传的那样好
    •     通义千问和其开源版本 qwen-coder v2.0 对比,似乎通义千问更好,也许是开源版本略微落后的原因。
    •     文心一言 似乎想走 cursor 的路线,代码规范,步骤完整,但目前来说,还没有做到复制粘贴即可用
    •     Kimi豆包 在编码能力还是较弱的,尤其是 Kimi 还需要努力
  3. 结果好坏跟参数大小关联性也不大,也可能是本次用的大模型参数在 9 ~ 22b 较小规模,所以差别不大。