続きです。
【エラーメッセージ】
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
memcpy(&gs.m_buffer, Data(bytes: UnsafePointer
【修正後】
var buffer : UnsafePointer
memcpy(&gs.m_buffer, buffer, newX * newY * 4)
【解説】
エラーの直接の解説ではないです。withUnsafeBytesを使う以前に、なんで一旦Data型に変換してたんだろう・・・
直接 UnsafePointer
【エラーメッセージ】
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日。
・・・続く