スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Swift2とXcode7.0へ移行する時のハマりポイント抜粋

Swift2が発表され、Xcodeは7.0になり、iOSは9。
こういうメジャーアップデートは開発者を興奮させる一方で絶望させる。
これは経験したことがあるひとじゃないとわからないことだが、
昨日まで調子よく動いていたコードに何百というエラーが出てきて修正をせまられる。
この時の絶望といったらない。

ただ直せばいいてもんじゃなく、当然その後テストも必要なので、ものすごい工数がかかる。
創造的な工数ならどれだけでもかけたいところだが、この手の作業はメンテナンスに近く、
さっき青く塗りつぶした壁を今度は緑に塗るというような作業だ。
中には誰か別の人が絶妙に塗りつぶしていた箇所もあったりする。
そう、ライブラリを使っていたり第三者がコーディングしていた部分だ。
これらのパートは本当に難題になりかねない。処理を丸ごと変更せざるを得ない可能性もある。

と、愚痴はこれくらいにして早速ひっかかった部分を列挙していく。
当然のことながら下記が修正すべきすべての内容ではない。
あくまでも私が必要とされた修正箇所の一部だ。

1. linker command failed with exit code 1 (use -v to see invocation)
これは下記を参照。
設定が終わったら一度 Product > Clean したほうがいい。
http://qiita.com/harhogefoo/items/979484aeb9f4742f4d32


2. println -> print
これは自動補完してくれるので引っかかる人はいないと思うが、なにせ数が多い。


3. var -> let
あとで値を変更することがない変数は定数にするようにと言われる。
これは無視してもいいが、私はたくさん怒られたのでとりあえず全部直した。


4. PageController
ツアーとかにつかうPageControllerは下記のように変更。
pageController.setViewControllers(startingViewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)

->

pageController.setViewControllers(startingViewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)


5. nil -> []
オプションをnilとしていたところを[]と書く部分が何箇所かあった。下記は一例。
base64EncodedStringWithOptions(nil)

->

base64EncodedStringWithOptions([])


6. xxx.toInt() -> Int(xxx)
intへのキャストはInt(xxx)を使う


7. count(string) -> string.characters.count
文字列の文字数カウントが上記のように


8. テーブルのセルのスワイプ
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {}

->

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {}


9. 写真を選択したあとに呼ばれる関数
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

->

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {


10. エラー処理
ここが一番大きいかと思うが、
Swiftはかたくなにエラー処理をさせなかった。
させなかったというと言い過ぎだが、他言語で用いられている

try - catch

などは使わせなかった。が、Swift2では仕様が変わっている。
具体的には

do{
try xxx
}catch{
//エラー処理
}

のようにする。


コメント

コメントの投稿

非公開コメント

PR

PR

プロフィール

何でも書くman

Author:何でも書くman
思ったことや備忘録など、とりあえずなんでも書きます。IT系のことや趣味、生活に関わることなども。

ページの先頭へ戻る
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。