LoginSignup
1
1

More than 5 years have passed since last update.

Swift でクラス名一括変換した際、うっかり小文字変数名も変わってしまった時の話

Last updated at Posted at 2016-11-01

クラスの名前などを 一括 Rename する場合などに、油断していると タイプ名と変数名をまとめてに変換しまいしまったという経験のあるかたも少なくないかと思います。以下のようなコードで…

class YourObject {
}

class TheirObject {
    var yourObject: YourObject?
}

YourObjectMyObject に一括変換した際、小文字で始まる変数名 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 だったのですね。驚きです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1