LoginSignup
3
0

More than 5 years have passed since last update.

クラス定数にアクセスする時type(of: self)するのがめんどうだと思う人

Last updated at Posted at 2017-11-15

Swiftでクラス定数を宣言するときはstatic letを使うのが基本だと思う。

class User {
  static let nameMaxLength = 10
  var name: String
}

でも、こうするとインスタンスメソッド(static funcでないもの)からは、いちいちtype(of: self)しないとアクセスできない。

if self.name > type(of: self).nameMaxLength {
  // Do something.
}

これがめんどう。インスタンスメソッドでしか使わないならstatic letではなく、ただのletにしてしまう手もある。

class User {
  let nameMaxLength = 10

しかし、クラスメソッド(static func)からアクセス出来ないので困ることもある。そこでfileprivateをclassの外で宣言してしまうのも手である。

fileprivate let nameMaxLength = 10

class User {
  var name: String
}

これだとインスタンスメソッド、クラスメソッド両方から単にnameMaxLengthとしてアクセスできる。ただしfileprivateなので、他のファイルからはアクセス出来ないので注意。

その場合、こうするとか・・・

fileprivate let _nameMaxLength = 10

class User {
  static let maxNameLength = _maxNameLength

そこまでtype(of: self)を使いたくないかって話ですが。

3
0
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
3
0