クラスの名前などを 一括 Rename する場合などに、油断していると タイプ名と変数名をまとめてに変換しまいしまったという経験のあるかたも少なくないかと思います。以下のようなコードで…
class YourObject {
}
class TheirObject {
var yourObject: YourObject?
}
YourObject
を MyObject
に一括変換した際、小文字で始まる変数名 yourObject
もうっかり大文字で始まる MyObject
に変換されてしまって、慌てて修正なんていう場合です。
class MyObject {
}
class TheirObject {
var MyObject: MyObject?
}
今回 Xcode 8.1 になっても懲りずにこれをやってしまいました。ところが、今回ビルドエラーにならいケースがあったので、あれっ!?と思い検証してみました。すると、Xcode 8.1 で以下のように書いても、エラーになるのは最後の行 [4]
だけでした。[1]
, [2]
, [3]
がエラーにならないのは不思議な感じがします。
// Xcode 8.1
// Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)
class MyObject {
var MyObject: String? // [1] 👍
}
class YourObject {
var MyObject: MyObject? // [2] 👍
}
class ThierObject {
var YourObject: MyObject? // [3] 👍
}
var MyObject: MyObject? // [4] 🚫 error!!
そこで、Xcode 8.0 を引っ張り出してきて、試してみました。
// Xcode 8.0
// Apple Swift version 3.0 (swiftlang-800.0.46.2 clang-800.0.38)
class MyObject {
var MyObject: String? // [1] 👍
}
class YourObject {
var MyObject: MyObject? // [2] 👍
}
class ThierObject {
var YourObject: MyObject? // [3] 👍
}
var MyObject: MyObject? // [4] 🚫 error!!
Xcode 8.1 と同じ挙動で、Xcode 8.0 の時から [1]
, [2]
, [3]
の書き方は OK なようです。では、さらに Xcode 7.3 を召喚して、試してみました。
// Xcode 7.3
// Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.31)
class MyObject {
var MyObject: String? // [1] 👍
}
class YourObject {
var MyObject: MyObject? // [2] 🚫 error!
}
class ThierObject {
var YourObject: MyObject? // [3] 👍
}
var MyObject: MyObject? // [4] 🚫 error!
[1]
と [3]
も OK だったのですね。驚きです。