以下の内容はhttps://techblog.spiderplus.co.jp/iosdc2025_pannel_day2より取得しました。


iOSDC Japan 2025 パネル企画 Day2

#生成AIでリファクタリングやってみた

企画内容

生成AIを使ってリファクタリングをします。
下記のプロンプトとBeforeのコードからAfterのコードが生成されました。

Afterのコードを採用しますか?
採用する / 採用しない

回答パネルへ理由や感想などの付箋を貼ってください。

AI モデル

Claude Desktop Sonnet4

プロンプト

以下のSwiftコードを分析し、並行処理の安全性を最優先に改善してください。

【重点項目】
- データ競合・race conditionの排除
- Actor modelによる状態保護
- Swift Concurrency(async/await)の活用
- @MainActorによるUI更新の安全性

【出力形式】
問題点:[1文]
改善案:[コードのみ]
効果:[1文]

【コード】
```swift
[ここにコードを挿入]
```

Before

class CounterManager: ObservableObject {
    @Published var count = 0
    private var isProcessing = false
    
    func increment() {
        DispatchQueue.global().async {
            if !self.isProcessing {
                self.isProcessing = true
                Thread.sleep(forTimeInterval: 0.1)
                DispatchQueue.main.async {
                    self.count += 1
                    self.isProcessing = false
                }
            }
        }
    }
    
    func decrement() {
        DispatchQueue.global().async {
            if !self.isProcessing {
                self.isProcessing = true
                Thread.sleep(forTimeInterval: 0.1)
                DispatchQueue.main.async {
                    self.count -= 1
                    self.isProcessing = false
                }
            }
        }
    }
    
    func reset() {
        DispatchQueue.main.async {
            self.count = 0
            self.isProcessing = false
        }
    }
}

After

@MainActor
class CounterManager: ObservableObject {
    @Published var count = 0
    private var isProcessing = false
    
    func increment() async {
        guard !isProcessing else { return }
        isProcessing = true
        
        await Task.detached {
            try? await Task.sleep(for: .milliseconds(100))
        }.value
        
        count += 1
        isProcessing = false
    }
    
    func decrement() async {
        guard !isProcessing else { return }
        isProcessing = true
        
        await Task.detached {
            try? await Task.sleep(for: .milliseconds(100))
        }.value
        
        count -= 1
        isProcessing = false
    }
    
    func reset() {
        count = 0
        isProcessing = false
    }
}

※出力結果から「改善案」のコードのみ抜粋




以上の内容はhttps://techblog.spiderplus.co.jp/iosdc2025_pannel_day2より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14