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

コンバートしたらエラーが増えた!とか言っててもエラーが無くなる訳ではないので、諦めてエラー箇所を直していきます。

以下、修正したエラーです。

【エラーメッセージ】
GameScene.swift:218:19: Method does not override any method from its superclass
【修正前】
override func touchesBegan(_ touches: NSSet, with event: UIEvent) {
【修正後】
override func touchesBegan(_ touches: Set, with event: UIEvent?) { // 3.1
【解説】
メソッドの定義が変わったようです。overrideを指示しているにもかかわらず、該当のメソッドがスーパークラスに見つからないので怒られています。最新のメソッド定義に直しました。NSSetがSetになりました。Swift1.2でコレクションクラスSetが追加されたため、Objective-CからあったNSSetを置き換えたのでしょうね。UIEvent?は、オプショナル型というやつですね。nilを許容するようになりましたが、なぜ許容するようにしたんですかね?

【エラーメッセージ】
GameScene.swift:221:19: Method does not override any method from its superclass
【修正前】
override func touchesMoved(_ touches: NSSet, with event: UIEvent) {
【修正後】
override func touchesMoved(_ touches: Set, with event: UIEvent?) { // 3.1
【解説】
同じ

【エラーメッセージ】
GameScene.swift:224:19: Method does not override any method from its superclass
【修正前】
override func touchesEnded(_ touches: NSSet, with event: UIEvent) {
【修正後】
override func touchesEnded(_ touches: Set, with event: UIEvent?) { // 3.1
【解説】
同じ

【エラーメッセージ】
GameScene.swift:227:19: Method does not override any method from its superclass
【修正前】
override func touchesCancelled(_ touches: NSSet!, with event: UIEvent!) {
【修正後】
override func touchesCancelled(_ touches: Set, with event: UIEvent?) { // 3.1
【解説】
同じ

【エラーメッセージ】
Missing argument label ‘rawValue:’ in call
【修正前】
fileprivate let m_bitmapInfo : CGBitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
【修正後】
fileprivate let m_bitmapInfo : CGBitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue) // 3.1
【解説】
Swift3.0から、1つ目の引数にもラベル名が必要になったみたいです。今までは2つめ以降のみラベル名が必要だったので、統一感が出て良いのではないでしょうか。

【エラーメッセージ】
‘PremultipliedLast’ has been renamed to ‘premultipliedLast’
【修正前】
fileprivate let m_bitmapInfo : CGBitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)
【修正後】
fileprivate let m_bitmapInfo : CGBitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue) // 3.1
【解説】
‘PremultipliedLast’の先頭が小文字に変更になったとのことです。

【エラーメッセージ】
Value of type ‘String’ has no member ‘stringByAppendingPathComponent’
【エラー箇所】
let paths1 = NSSearchPathForDirectoriesInDomains(
FileManager.SearchPathDirectory.documentDirectory,
FileManager.SearchPathDomainMask.userDomainMask, true)
let path = paths1[0].stringByAppendingPathComponent(“settings.dat”)
【対策】
extension String {
func stringByAppendingPathComponent(_ path: String) -> String {
let nsSt = self as NSString
return nsSt.appendingPathComponent(path)
}
}
【解説】
NSSearchPathForDirectoriesInDomains の戻り値が、NSArray* から [String]に変わってしまったようです。で、stringByAppendingPathComponentはNSStringのメンバなので、呼べないと怒られています。対策として、エクステンションにより既存のStringクラスにstringByAppendingPathComponentを追加し、内部的にNSStringの該当メソッドを呼ぶようにしました。エクステンション素敵。なお、NSStringのメソッドstringByAppendingPathComponentは名前がappendingPathComponentに変更となったようです。

・・・続く

コメントを残す

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