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


iOSDC Japan 2025 パネル企画 前夜祭・Day1

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

企画内容

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

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

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

AI モデル

ChatGPT GPT-5

プロンプト

以下のSwiftコードを分析し、enumとパターンマッチングを活用して最適化してください。

【改善の指針】
- 複数のBool/Optional変数をenum + associated valueで統合
- if-else文の連鎖をswitch文に置き換え
- 無効な状態の組み合わせを型レベルで排除
- 不要な変数のスコープ汚染を防止

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

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

Before

class APIService {
    var isLoading = false
    var data: [User]? = nil
    var error: Error? = nil
    var isEmpty = false
    
    func fetchUsers() {
        isLoading = true
        error = nil
        data = nil
        isEmpty = false
        
        URLSession.shared.dataTask(with: URL(string: "...")!) { data, response, error in
            DispatchQueue.main.async {
                self.isLoading = false
                
                if let error = error {
                    self.error = error
                    return
                }
                
                if let users = self.parseUsers(data) {
                    if users.isEmpty {
                        self.isEmpty = true
                    } else {
                        self.data = users
                    }
                }
            }
        }.resume()
    }
}

After

class APIService: ObservableObject {
    enum State {
        case idle
        case loading
        case success([User])
        case empty
        case failure(Error)
    }
    
    @Published private(set) var state: State = .idle
    
    func fetchUsers() {
        state = .loading
        
        URLSession.shared.dataTask(with: URL(string: "...")!) { data, _, error in
            DispatchQueue.main.async {
                if let error = error {
                    self.state = .failure(error)
                    return
                }
                
                guard let users = self.parseUsers(data) else {
                    self.state = .failure(NSError(domain: "ParseError", code: -1))
                    return
                }
                
                self.state = users.isEmpty ? .empty : .success(users)
            }
        }.resume()
    }
    
    private func parseUsers(_ data: Data?) -> [User]? {
        // JSON decoding処理
        nil
    }
}

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




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

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