Swiftの廃止になったコンパイルエラー

公開しても特にメリットがあるものではないが、間違えて公開を押してしまった。

Prefix/Postfix '***' is reserved
前置/後置演算子の***は予約されています
【出現ver】Swift 2.1

var abc =5 //エラー
var def= 10 //エラー
決められた正しい使われ方をしていない。
=の前後のスペースの取り方が統一されてない。開けるなら左右とも開ける、閉じるなら左右とも閉じる。

【非出現ver】Swift 3.1
【このコンパイルエラーに変更になりました】'***' must have consistent whitespace on both sides



All stored properties of a class instance must be initialized before returning nil from an initializer
イニシャライザからnilで返る前に、クラスインスタンスの全てのストアドプロパティを初期化しないといけない
【出現ver】Swift 2.1

class ClassA {
    var a: String
    init?(a: String?) {
        if a == nil {
            return nil //エラー
        }
        self.a = ""
    }
}
Swift 3.1ではエラーにならなかった。仕様変更か。

【非出現ver】Swift 3.1



Cannot assign to 'let' value '〜'
letで宣言した定数に値を代入しようとした
【出現ver】Swift 2.1より前

【非出現ver】Swift 2.1
【このコンパイルエラーに変更になりました】Cannot assign to value: '***' is a 'let' constant



Cannot assign to immutable value of type '***'
変更できない型'***'に代入できません
【出現ver】Swift 2.1より前

var abc: Bool
var abc2: Bool = true
if abc = abc2 {
}
let忘れか、=忘れか、C言語方式で代入結果を用いようとしたか。
immutableとあるのでabcをif letブロック内のローカル定数と想定か。

【非出現ver】Swift 2.1
他のメッセージに変更になった。



Cannot assign to the result of this expression
この表現の(コンパイラによる解析の)結果には代入することは出来ません
【出現ver】Swift 2.1より前
let宣言された配列の要素を変更しようとしたら出た。

【非出現ver】Swift 2.1
【このコンパイルエラーに変更になりました】Cannot assign through subscript: '***' is a 'let' constant



'let' declarations require an initializer expression
letで宣言した定数に初期値が与えられていない
このエラーは以前のバージョンで出ました。

let abc: Int
以前のバージョンではlet宣言時に値確定が必要でした。1.2ではこの制限が外されています。

【非出現ver】Swift1.2



Use of property '〜' in base object before super.init initializes it
base object(継承してきたオブジェクト)の'〜'がsuper.initで初期化する前に使われようとしました
このエラーは以前のバージョンで出ました。
【非出現ver】Swift1.2



Could not find an overload for '__conversion' that accepts the supplied arguments
与えられた引数での変換は用意されていません
型の変換をしようとしましたが、与えられた「変換元」と「変換先」の組み合わせの処理は出来ません。
【確認ver】Swiftのベータバージョン



Cannot find an initializer for type '[(A〜)]' that accepts an argument list of type '(count: Int, repeatedValue: B〜)'
(count: Int, repeatedValue: B〜)という引数リストを受け付ける初期化メソッドは[(A〜)]には見つかりません。
以前出た。
【このコンパイルエラーに変更になりました】Cannot invoke initializer for type '[A***]' with an argument list of type '(count: Int, repeatedValue: B〜)'



Definition conflicts with previous value
すでに宣言してある値と定義衝突する
【確認ver】Swift 2.1【語】definition 定義 conflict 衝突
定義しようとしているものはすでに定義済。

var abc = 0
var abc = 1 //エラー

【非出現ver】Swift 3.1
【このコンパイルエラーに変更になりました】Invalid redeclaration of '***'



Cannot convert the expression's type '〜' to type '〜'
異なる型へ代入しようとしている
【確認ver】Swiftのベータバージョン
【非出現ver】Swift1.0



Address of variable '〜' taken before it is initialized
'〜'のアドレスが使う前に初期化されていない
【確認ver】Swift1.2より前
【非出現ver】Swift1.2



Cannot assign a value of type 'nil' to a value of type '〜'
nilを〜に代入できません
【確認ver】Swift2.1より前
【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Nil cannot be assigned to type '〜'



'〜' is not a subtype of 〜
〜は〜のサブタイプではありません
【確認ver】Swift1.2より前
キャストできない状況など

var a = 5
if a is Double { //エラー
}

var a: Int = 5
var b = a as? Double //エラー

【非出現ver】Swift1.2



Braced block of statements is an unused closure
カッコで囲まれた使われないクロージャ
【確認ver】Swift 2.1
{}などで囲まれた部分が何かの原因で無効?
{}より前で何か問題がある場合にも出る

func testFuncAAA() {
    {
        var a = 0
    }
}
意味の無い{}囲み

infix operator +-(a: Int, b: Int) {} //エラー
演算子の宣言では引数がいらないのでそこでコンパイラが処理できない。その後の{}で当エラー。

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】Closure expression is unused



'@lvalue $T5' is not identical to 'Int'
'@lvalue $T5'はIntに一致しません
letで宣言した配列の要素に値を入れようとした時に出る。
【確認ver】Swift1.2より前
let i = [0] 
i[0] = 0 //エラー

【非出現ver】Swift1.2
【このコンパイルエラーに変更になりました】Cannot assign through subscript: '***' is a 'let' constant



'[〜]' is not identical to 'UInt8'
'[〜]'はUInt8と一致しません
【確認ver】Swift1.2より前
var num: [Int] = [1,2]
num += 3
num[0] += 3ならOK。UInt8は3の型のことを言っていると思われる。[〜]が配列の型。

【非出現ver】Swift1.2
【このコンパイルエラーに変更になりました】Binary operator '+=' cannot be applied to operands of type '[Int]' and 'Int'



'A〜' does not have a member named 'B〜'
AはBというメンバを持っていません
【確認ver】Swift2.1より前
【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Value of type 'A***' has no member 'B***'



immutable value of type 'A' only has mutating members named 'B'
onlyのニュアンスがわからないので訳文なし
【確認ver】Swift2.1より前
【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Cannot use mutating member on immutable value: '***' is a 'let' constant



Could not find an overload for '〜' that accepts the supplied arguments
関数は見つかったが与えられた引数の組のものはない
【確認ver】Swiftベータバージョン
【このコンパイルエラーに変更になりました】Cannot invoke '〜' with an argument list of type '〜'



Extraneous '#' in parameter; '〜' is already the keyword argument name
引数表記部での余計な#; '〜'はすでに外部引数名になっています
【確認ver】Swift2.0より前
外部引数名と内部引数名を兼用しているものに#を付けたときに出るエラー。外部引数名になっているのでそれ以上#はいらない。

class ABC {
    func abcFunc(a: Int, # b: Int){
    }
}
bはすでに外部引数名になっているので#はいらない。

【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Expected parameter name followed by ':'



Enum cases require explicit raw values when the raw type is not integer literal convertible
整数以外の生データ持ちenumとして定義したなら、生データをあたえる必要があります
【確認ver】Swift2.1より前

enum BloodType: String {
    case A //エラーになっていた
    case B
    case AB
    case O
}
デフォルトのrawValueが与えられるようになったのでエラーではなくなった。
Stringには要素名と同じ値が与えられ、DoubleにはIntの場合のデフォルト値をDouble化したものが1.0から順に与えられる。

【非出現ver】Swift2.1



'A〜' is not convertible to 'UnsafeMutablePointer<B〜>'
'A〜'は'B〜'の(安全でなくて変更可の?)ポインタ形に変換出来ません
UnsafeMutablePointerの調査は保留。
【確認ver】Swift2.1より前
(例)&を付けて関数に渡さないといけないところで&が抜けている

【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Cannot invoke 〜 with an argument list



Reference to 'NSError' not used to initialize a inout parameter
NSErrorへの参照がinoutパラメータの初期化に使われていない
【確認ver】Swift2.1より前
【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】'&' can only appear immediately in a call argument list



Cannot assign to 'A' in 'B'
Bの要素のAには代入できません
【確認ver】Swift2.1より前
let abc = (1, "A")
abc.1 = "B"
abc.def = xx のときに値を保持しているもの(abc)がlet

class AAA {
    var a: Int {
        get {
            5
        }
    }
}
var aaa:AAA = AAA()
aaa.a = 3
読み込みOnlyのプロパティに書き込もうとした

【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Cannot assign to property



Reference to 'NSError' not used to initialize a inout parameter
NSErrorへの参照がinoutパラメータの初期化に使われていない
【確認ver】Swift2.1より前
【このコンパイルエラーに変更になりました】'&' can only appear immediately in a call argument list



'A〜' is not convertible to 'UnsafeMutablePointer<B〜>'
'A〜'は'B〜'の(安全でなくて変更可の?)ポインタ形に変換出来ません
UnsafeMutablePointerの調査は保留。
【確認ver】Swift2.1より前
(例)&を付けて関数に渡さないといけないところで&が抜けている

【非出現ver】Swift2.1
【このコンパイルエラーに変更になりました】Cannot invoke 〜 with an argument list



'inout' must appear before the parameter name
inoutはパラメータ名の前に書かないといけません
【確認ver】Swift 2.1

func inoutFunc(a: inout Int) {    
}
この書き方でエラーが出ていた

【非出現ver】Swift3.0
仕様変更により型の前に書く書き方はOKになりました。



'#' has been removed from Swift; '***' already has an argument label
#はSwiftから取り除かれました。'***'はすでに引数ラベルを持っています。
'#' has been removed from Swift; double up '***' to make the argument label the same as the parameter name
#はSwiftから取り除かれました。パラメータ名と引数名を同じにするには***のように2回繰り返してください。
【確認ver】Swift 2.1
昔(Swift1系)は#を使って、引数名とパラメータ名を同じにすることが出来たが、Swift2.0から廃止になった。
ひとつ目の引数にはdouble up 〜が出ます。
ふたつめ以降の引数には、already has 〜が出ます。
対応はひとつ目の引数かふたつ目以降かで変わります。

//2.1
func twoParamFunc(#a: Int, b: Int) { //エラー '#' has been〜 double up〜

}
ひとつ目の引数なので、aを2回書くしかない。

//2.1
func twoParamFunc(a: Int, #b: Int) { //エラー '#' has been〜 'b' already〜

}
ふたつ目の引数なので#を消すだけでよい。

【非出現ver】Swift4.0



Extraneous '_' in parameter; '***' has no keyword argument name
引数表記部での余計な_; '***'は引数名を持っていません
【確認ver】Swift 2.1
_は呼び出し時の引数ラベルを省略するという意味だが、そもそも持っていない(ひとつ目の引数は必要ない)ので省略出来ないという意味のメッセージかと。

//2.1
func twoParamFunc(_ a: Int, b: Int) { //エラー

}

【非出現ver】Swift4.0



Extraneous '#' in parameter; keyword argument and parameter name already specified separately
引数表記部での余計な#; 外部引数名と内部引数名は離れて指定されています
【確認ver】Swift 2.1【語】Extraneous 無関係の、本質的でない、外部から来た、異質の
外部引数名があるのに#を付けたときに出るエラー。外部引数名があるのでそれ以上#はいらない。というか#はSwift2.0で廃止になった。

//2.1
class ABC {
    func abcFunc(# aa a: Int, # bb b: Int){
    }
}
aaにもbbにも#がつけてあるが両方とも#はいらない。

【非出現ver】Swift4.0



Expected identifier in function declaration
関数の宣言で関数名が期待される
【確認ver】Swift 2.1

class A {
    func init() {
 
    }
}
initにfuncキーワードをつけた。initにはfuncはいらない。funcをつけたせいでfuncの後にinit以外の名前を要求している。

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】Keyword 'init' cannot be used as an identifier here



Class stored properties not yet supported in classes; did you mean 'static'?
class(指定子をつけた)ストアドプロパティはサポートされていません。static(これは使用可)のつもりですか
【確認ver】Swift 2.1
【非出現ver】Swift3.0



Cannot assign to '〜' in 'self'
selfで要素に代入することは出来ません
【確認ver】Swift 2.2
struct ABC{
    var a: Int
    var b: Int
    func change(){
        let c = a
        a = b //エラー
        b = c //エラー
    }
}

【非出現ver】Swift 4.0



Initializer may only be declared within a type
初期化メソッドは型の中で宣言しないといけない
【確認ver】Swift 2.1【途方にくれる度】★★★★
class Oya {
    var a: Int
    convenience init() {
        init(a: 0) //エラー
    }
 
    init(a: Int) {
        self.a = a
    }
}
self.init(〜)とすればよい。
エラーが出ているinit(〜)は、init(〜)の実行文ではなく宣言文と解釈されていて、何かのメソッド(この場合はinit())の中でその宣言を行ってはいけません、というメッセージの意味かと思われる。

【非出現ver】Swift 4.0
【このコンパイルエラーに変更になりました】Missing 'self.' at initializer invocation



Enum cases require explicit raw values when the raw type is not integer literal convertible
整数以外の生データ持ちenumとして定義したなら、生データをあたえる必要があります
【確認ver】Swift 2.1より前
enum BloodType: String {
    case A //エラーになっていた
    case B
    case AB
    case O
}
デフォルトのrawValueが与えられるようになったのでエラーではなくなった。
Stringには要素名と同じ値が与えられ、DoubleにはIntの場合のデフォルト値をDouble化したものが1.0から順に与えられる。

【非出現ver】Swift2.1



Class method overrides a 'final' class method
クラスメソッドがfinalなメソッドをオーバラードしようとしている
【確認ver】Swift 2.1
class Oya {
    static func funcStatic() {
    }
}

class Ko: Oya {
    override static func funcStatic() { //エラー
    }
}
親クラスではstaticで宣言してあるが意味的にはfinal

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】Cannot override static method



Class var overrides a 'final' class var
クラス変数がfinalのクラス変数をオーバーライドしている
【確認ver】Swift 2.2
継承したいなら親側はstaticでなくclassで宣言するとOK

class Oya {
    static var a: Int{
        get{
            return self.a
        }
        set{
            self.a = newValue
        }
    }
}

class Ko: Oya {
    static override var a: Int{ //エラー
        get{
            return self.a
        }
        set{
            self.a = newValue
        }
    }
}

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】Cannot override static var



Operator is not known binary operator
演算子は2項演算子ではありません
【確認ver】Swift 2.1
var a: Int = 0
var b: Int = 0
++ a //エラー
b = a++a //エラー

【非出現ver】Swift4.0



Bound value in a conditional binding must be of Optional type
判断部分はオプショナルタイプじゃないとだめ
【確認ver】Swift2.1より前で出た。
【非出現ver】Swift2.1
【語】bound : bindの過去分詞(と思うがbind自体のニュアンスがなかなかつかめない)




Prefix/Postfix '***' is reserved
前置/後置演算子の***は予約されています
【確認ver】Swift 2.1

決められた正しい使われ方をしていない。

var abc =5 //エラー
var def= 10 //エラー
=の前後のスペースの取り方が統一されてない。開けるなら左右とも開ける、閉じるなら左右とも閉じる。

【非出現ver】Swift 3.1
【このコンパイルエラーに変更になりました】'=' must have consistent whitespace on both sides



Expected '{' after operator name in 'operator' declaration
演算子宣言では演算子名の後に{が想定される
【確認ver】Swift 2.2
宣言と定義の2つの理解が混乱していると出る。

infix operator +-(a: Int, b: Int) {} //エラー
宣言では引数部分はいらない

【非出現ver】Swift 4.0
仕様変更により{}はいらなくなった



Arithmetic operation 'A***' (on type 'B***') results in an overflow
'B***'の上で'A***'の演算をするとオーバーします
【確認ver】Swift 2.1

var abc: Int8
var abc2: Int8
var abc3: Int8
abc = 100
abc2 = 100
abc3 = abc * abc2 //エラー

【非出現ver】Swift 4.0
オーバーフローのときは実行時エラーになった。



Type 'inout ***' of variable is not materializable
変数のinout ***型はマテリアライザブル(?)でない
【確認ver】Swift 2.1

//これは完全にエラーを出すためのコード
var error: NSError = NSError(coder: NSCoder())!
var inoutError = &error //エラー

【非出現ver】Swift 4.0
【このコンパイルエラーに変更になりました】Variable has type 'inout ***' which includes nested inout parameters



Tuple types '(A1,A2〜)' and '(B1,B2〜)' have a different number of elements (〜 vs 〜)
A1等の要素を持つタプルとB1等のタプルは要素数が違う
最後の(〜 vs 〜)に具体的な要素数が入る
【確認ver】Swift 2.1より前

var abc:(Int, String) = (1, "A", 10)


【非出現ver】Swift 4.0
【このコンパイルエラーに変更になりました】Cannot convert value of type '(***)' to specified type '(***)'



Expected condition in 'for' statement
for文の条件部分が期待されているものと違う
【確認ver】Swift 2.1より前

for var i in 0...10 {
}
Swift 2.1より前でvarつけてはいけない。同時に他のアラームも多数出る。
この例はSwift 2.1ではOKになった書き方。Swift 2.1ではiをループ内で設定出来る。しかし、次のループの開始時に書き換えられる。

【非出現ver】Swift 2.1



'[AnyObject]?' does not have a member named 'Generator'
'[AnyObject]?'は'Generator'という名のメンバーを持っていません
【確認ver】Swift 2.1より前

//UITabBarControllerサブクラスにて
for tempViewController in self.viewControllers {
}
UITabBarControllerなどのself.viewControllersは[AnyObject]?なのでこれを[AnyObject]にしてやる必要がある。

【非出現ver】Swift 2.1以降



Expression does not conform to type 'NillLiteralConvertible'
書かれたものはnil表現に適応していません
【確認ver】Swift 2.1より前

var abcd = nil
Int?やString?などの型を決めないとだめ。
型が未定なことが原因なので、エラーメッセージに改善の余地があるように感じる。

【非出現ver】Swift 2.1以降
【このコンパイルエラーに変更になりました】Type of expression is ambiguous without more context



Variable '***' inferred to nil with unspecified type; use a type annotation to specify which nil
わからない型でnilへの推論している。nilを扱える型を宣言して下さい。
【確認ver】Swift1.2より前

var abcd = nil
Int?などを宣言してやらないとだめ。

【非出現ver】Swift1.2以降



Operand of postfix '!'/postfix '?' should have optional type; type is '〜'
!後置演算子/?後置演算子はオプショナルタイプの後ろにつけないといけません。書かれているタイプは'〜'です。
【確認ver】Swift2.1より前

var abc: String = "ABC"
var def = abc! //エラー
var abc: String = "ABC"
var def = abc? //エラー
Stringがオプショナル型ではない

【非出現ver】Swift2.1以降



Boolean condition requires 'where' to separate it from variable binding
ブール条件部をバインディングから分けるにはwhereを使います
【確認ver】Swift 2.1

let a: Bool = true
let b: Int? = 0
let c: Int? = 0
if let _ = b, _ = c, a { //エラー 
}
aの前はwhereとするとOK

【非出現ver】Swift4.0
仕様が変わった。
//4.0
if let _ = b, let _ = c, a { 
}
とする。whereはいらない。



Operator is not a known binary operator
演算子は知られていない2項演算子である
【確認ver】Swift 2.1 【語】binary operator 2項演算子

for counter in 1..5 {
}
'..'ではなく'..<'が正しい

let a = 5 &/ 3
let b = 5 &% 3
これらの演算子は廃止になった。

【非出現ver】Swift4.0
同時に出ていたUse of unresolved operator '..'は引き続き表示される



Braced block of statements is an unused closure
{}の中身が使用されないクロージャ
【確認ver】Swift 2.1

for counter in 1..=5 {
}
'..='ではなく'...'が正しい

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】Expected expression after operator



Switch must be exhaustive, consider adding a default clause
Switchによる場合分けにはもれがないことが必要、default節の追加を検討してはどうでしょうか
【確認ver】Swift 2.1【語】exhaustive あますところのない
場合分けにもれがあるときに出る

switch bloodType {
    case .A:
        print("A型です")
    case .B:
        print("B型です")
} //エラー OとABがない

Swift4.0ではconsider adding a default clauseの代わりにDo you want to add missing cases?とFixボタンが出た。



'case' labels with multiple patterns cannot declare variables
caseの条件に複数のパターンを書くときは、変数(定数も)を宣言出来ない
【確認ver】Swift 2.1【語】multiple 複数の

var a = (1, 2)
switch a {
case (1, let b), (2, 2): //エラー
    print(b)
default:
    break
}
(2, 2)だったときにbが確定しないのでエラー

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】'***' must be bound in every pattern



Declaring a public var for an internal class
internalクラスでpublicの変数を宣言しています
【確認ver】Swift 2.1

class SomeInternalClass {
    public var a: Int = 0 //ワーニング
}

【非出現ver】Swift4.0
出なくなった。



'unowned' cannot be applied to non-class type '***?'
unownedは非クラス型に適用できません
【確認ver】Swift 2.1【途方にくれる度】★★★

【非出現ver】Swift4.0
【このコンパイルエラーに変更になりました】'unowned' may only be applied to class and class-bound protocol types, not '***'



Forced cast of ' ***' to same type has no effect
同じ型への強制キャストには意味がありません
【確認ver】Swift 2.0
as!だと出るがasだと出ないのは少し疑問。

【非出現ver】Swift4.0



'***' inferred to have type 'AnyObject', which may be unexpected
'***'は推論されて'AnyObject'になります。これは期待されることではないかもしれません。
【確認ver】不明
asを使う状況であればasを使う

NSObjectを引っ張ってきた
サンプルコード保存し忘れ

【非出現ver】Swift4.0

コメント

このブログの人気の投稿

Swiftのコンパイルエラー寄せ集め

Swift2.2からSwift3.0への変換を行ってみて

AVAudioSession細かいことまとめ(late 2014)