読者です 読者をやめる 読者になる 読者になる

カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

swift 2.3 から swift 3.0 へアップグレードした時のソースの変更点まとめ

swift2 swift3
スポンサードリンク

Xcodeではじめる 簡単iPhoneアプリ開発[Xcode 8 & Swift 3対応]
f:id:InvokeTwoA:20151023183618p:plain「自動で全て変更してくれるから楽だなー」
f:id:InvokeTwoA:20151215172640p:plain「一応勉強のため、どこが変わったのか見てみましょう」

まずは自動修正の機能を使ってみた

関数の第一引数にラベルが必要になった

  • 変更前
// before
    func applicationWillResignActive(application: UIApplication) {
    }

// after
   func applicationWillResignActive(_ application: UIApplication) {
    }

f:id:InvokeTwoA:20151023183618p:plain「引数の前に_が付いてるのをよくみるね」
f:id:InvokeTwoA:20151215172640p:plain「swift3.0 では引数1個目にもラベルが必要になったので、そのせいですね」
f:id:InvokeTwoA:20151023183618p:plain「ついにその修正がきたか。引数の1個目だけラベル省略でずっと違和感しかなかったもんねー」
f:id:InvokeTwoA:20151215172640p:plain「自動修正では _ をつけてますが、これを機に適切なラベル名をセットしておきたいですな」

ついにNSが消えた

// before
let bundle = NSBundle.mainBundle()

// after
let bundle = Bundle.main

f:id:InvokeTwoA:20151023183618p:plain「ついにNSの2文字が消えた!!」
f:id:InvokeTwoA:20151215172640p:plain「悪しき時代の名残なので凄く良いと思う」
f:id:InvokeTwoA:20151023183618p:plain「なんでNSを頭に付けるんですか?とか質問を受けないで済むね」

objectへのアクセスの方法が変更

// before
let name = data.objectForKey("name") as? String
 _gameData.objectAtIndex(0)

// after
let name = data.object(forKey: "name") as? String
let data = _gameData.object(at: 0)

f:id:InvokeTwoA:20151023183618p:plain「我々がよく使う関数が変更されたね」
f:id:InvokeTwoA:20151215172640p:plain「まぁ、名前が変わっただけなのですぐに対応できるでしょう」

いろいろな命名にisが付いた

// before
_detectButton.enabled = false
_nameLabel.hidden = false

// after
_detectButton.isEnabled = false
_nameLabel.isHidden = false

f:id:InvokeTwoA:20151023183618p:plain「isが付いて名前が分かりやすくなったね」
f:id:InvokeTwoA:20151215172640p:plain「これも名前が変わっただけなのですぐに対応できそう」

コンパイルをして実行

f:id:InvokeTwoA:20151023183618p:plain「よーし! コンパイルを実行だー!」
f:id:InvokeTwoA:20151215172640p:plain「しかし約束されたエラーの数々。自動修正にはやはり限界がありますな」

配列の初期化部分でエラー

f:id:InvokeTwoA:20151215172640p:plain「配列の初期化部分で下記のエラーが!」

empty collection literal requires an explicit type
  • 修正前
// empty collection literal requires an explicit type
    var _gameData = []
    var _detectTextData = []
  • 修正後
    var _gameData = [] as NSArray
    var _detectTextData = []  as NSArray

動いた

f:id:InvokeTwoA:20151023183618p:plain「やったー! ばんばんざーい」
f:id:InvokeTwoA:20151215172640p:plain「まだ開発の初期段階だったから修正部分が少なくて良かったー」