本日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からコンパイルが早くなったようなので、(体感ではまだ若干おそ・・)
これから開発の遅延を巻き返すぞ!(笑)