Xcode
Swift

Xcode6.3アップデートすると必ずやってくるSwift1.2のエラー対処のいくつか

More than 3 years have passed since last update.

本日Xcode6.3がリリースされ、Swiftが1.2になりました。

Xcode6.2で動作していたものが、大量のエラーが吐かれたので焦りましたが、何とかエラーを回復させることができました。

自分が行ったことの大まかなまとめです。

(ただし、全員が以下のようにやれば上手くいくというものではありませんので)


1 Convert to Lastest Swift Syntax

まずはXcode6.3が用意してくれているコンバーターでいくつかのエラーを修正しましょう。

Edit -> Convert -> Convert to Lastest Swift Syntax

でひらけます。

これでas!などの細かい文法エラーなどを解消できました。

ただ、これだけでは私のダメコードは解消しなかったので、下記を進めます。


2 override init

UIViewを継承したカスタマイズUIViewのinitでエラーが発生していました。

    override init() { // <- error!!

super.init()
//something to do
}


Initializer does not override a designated initializer from its superclass


以下のように変更

    override init(frame: CGRect) {

super.init(frame: frame)
}

convenience init(){
self.init(frame: CGRectMake(0, 0, 100, 100))
//something to do
}


3 宣言だけしたlet

    let btn : UIButton!

override init() { // <- error!!
super.init()
self.btn = UIButton(frame: CGRectMake(0,0,100,30))
}

ここでは省略していますが、CGRectMakeを計算して出したかったので、

宣言だけして、initで初期化していたものは以下のように変更しました。

    let btn = UIButton()

override init(frame: CGRect) {
super.init(frame: frame)
}

convenience init(){
self.init(frame: CGRectMake(0, 0, 100, 100))
self.btn.frame = CGRectMake(0,0,100,30)
}

初期化して、frameはあとで変更することに。

またはvarで宣言することでも可能です。


4 touchesBegan

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {


Overriding method with selector 'touchesBegan:withEvent:' has incompatible type '(NSSet, UIEvent) -> ()'


↓以下のように変更

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {


5 AlamoFire

以下のエラー発生


Ambiguous use of 'responseJSON'


Xcode6.3ブランチを使いましょう。ただし今はBetaかと思いますので、自己責任で。

https://github.com/Alamofire/Alamofire/tree/xcode-6.3

もうmasterにマージされたっぽいので、アップデートしましょう。

https://github.com/Alamofire/Alamofire


最後に

ざっとですが、以上です。

Swift1.2からコンパイルが早くなったようなので、(体感ではまだ若干おそ・・)

これから開発の遅延を巻き返すぞ!(笑)