実録! 2年半ぶりのSwiftアプリバージョンアップ 1日目 その4

続きです。

【エラーメッセージ】
Extra argument ‘error’ in call
【修正前】
fileManager.removeItemAtPath(pngPath, error: nil)
【修正後】
do { // 3.1
try fileManager.removeItem(atPath: pngPath) // 3.1
} catch { // 3.1
print(“removeItem error”) // 3.1
} // 3.1
【解説】
エラー処理が変わりました。今後はtry catchで統一するんですね。また、removeItemAtPathはremoveItemに名称変更となり、第一引数のラベル名atPathが必須になりました。

【エラーメッセージ】
‘++’ is unavailable: it has been removed in Swift 3
【修正前】
if MAX_HISTORY <= ++gs.m_hisIdx {
【修正後】
gs.m_hisIdx += 1 // 3.1
if MAX_HISTORY <= gs.m_hisIdx { // 3.1
【解説】
++や–の演算子は廃止だそうです。わかりにくくなるからかしら・・・
変数の前の++は該当行より前で、変数の後の++は該当行より後でインクリメントします。デクリメントも同様です。

【エラーメッセージ】
‘bytes’ is unavailable: use withUnsafeBytes instead
【修正前】
var buffer : UnsafePointer = CFDataGetBytePtr(dataRef)
memcpy(&gs.m_buffer, Data(bytes: UnsafePointer(buffer), count : newX * newY * 4).bytes, newX * newY * 4)
【修正後】
var buffer : UnsafePointer = CFDataGetBytePtr(dataRef)
memcpy(&gs.m_buffer, buffer, newX * newY * 4)
【解説】
エラーの直接の解説ではないです。withUnsafeBytesを使う以前に、なんで一旦Data型に変換してたんだろう・・・
直接 UnsafePointer をmemcpyの引数に指定することでエラーを回避。動くかなぁ・・・

【エラーメッセージ】
NSString’ is not implicitly convertible to ‘String’; did you mean to use ‘as’ to explicitly convert?
【修正前】
let path = paths1[0].stringByAppendingPathComponent(NSString(format:”slot%02d.png”,index))
【修正後】
let path = paths1[0].stringByAppendingPathComponent(String(format:”slot%02d.png”,index)) // 3.1
【解説】
エラーの意味は「NSStringは暗黙的にStringへ変換できないよ?’as’使って明示的に変換したら?」です。stringByAppendingPathComponentの引数はStringですが、そこにNSStringを指定したのでこのエラーが発生しています。Stringにもformatがあるのでそれを使うようにし、NSStringを使わないように対処しました。

【エラーメッセージ】
GameViewController.swift:109:19: Method does not override any method from its superclass
【修正前】
override func supportedInterfaceOrientations() -> Int {
if UIDevice.current.userInterfaceIdiom == .phone {
return Int(UIInterfaceOrientationMask.allButUpsideDown.rawValue)
} else {
return Int(UIInterfaceOrientationMask.all.rawValue)
}
}
【修正後】
override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
if UIDevice.current.userInterfaceIdiom == .phone {
return UIInterfaceOrientationMask.allButUpsideDown
} else {
return UIInterfaceOrientationMask.all
}
}
【解説】
サポートしている画面の向きを返すメソッド supportedInterfaceOrientations の定義が変わったようです。戻り値も変わってるので、それに合わせてreturnの内容も調整しました。

【エラーメッセージ】
‘CGContextSetLineDash’ is unavailable: Use setLineDash(self:phase:lengths:)
【修正前】
CGContextSetLineDash(UIGraphicsGetCurrentContext(), 0, len, len.count)
【修正後】
UIGraphicsGetCurrentContext()?.setLineDash(phase: 0.0, lengths: len) // 3.1
【解説】
そろそろ疲れてきました ←解説になってない
2年半ぶりのSwiftなので、オプショナル型とかアンラップとかの知識を付け直しました。

今日はもう寝ます。さようなら2017年7月15日。

・・・続く

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です