先日下のような記事を見かけたので早速個人アプリで試してみました。
小規模アプリで試したので、大きいアプリだと違ってくるかもしれません。
試した感想
結果としては作業工数が半分くらいは減った気がします。
変換がおかしくてエラーが出るところは多々あるのですがメソッドの宣言などの単純な箇所はしっかり変換してくれて助かりました。
具体的にうまく行った所、うまく行かなかったところは下の通りです。
変換がうまく行った所
変換がうまく行った所・追加作業が必要だった所
微妙に形が違うメソッド
[UIImage imageNamed:@""];
はUIImage.imageNamed("")
へ変換されてました。
本来はUIImage(named: "")
となる箇所です。
あとは[@"" isEqualToString:@""]
は"".isEqualToString("")になっていました。
ここは"" == ""
が正しいです。
しかし- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
というメソッド定義はちゃんとfunc tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
に変換してくれていたのでメソッドによっては正しく変換してくれるかもしれません。
インスタンス変数の定義
下のようにインスタンス変数を定義していたのですが、これは反映されませんでした。
変換後に自分で定義する必要があります。
あとインスタンス変数をアンダーバー始まりで定義している場合は変換後にアンダーバーを取り除く必要があります。
@implementation MyClass {
NSString *_str;
}
@interface部分
@interface
は完全に無視されました。
その為プロパティーの定義も自分でやる必要がありました。
その他
他ではブリッヂファイルに使うクラスのimport
追加や引数付きマクロの変換も当然発生しました。
あとは無駄に変数の型を宣言していたりlet
で良い所をvar
にしていたりするのでその辺りも変更が必要です。
まとめ
色々と変換が必要な箇所もありましたが、メソッドや変数の定義・メソッド呼び出し等のめんどくさい変換作業を行ってくれて非常に素晴らしいサービスでした。
しかし変換後は色々なエラーが出るのでSwift
に慣れてない状態で使うと少し大変かもしれません。