Help us understand the problem. What is going on with this article?

Property must be declared private because its type uses a private type

More than 1 year has passed since last update.

過去に出会ったエラーメッセージとその対処方法備忘録

環境

  • XCode
  • Swift4.2

エラーメッセージ

Property must be declared private because its type uses a private type

エラー発生コード

class test
{
    private enum enums
    {
        case hoge,huga,piyo
    }
    var foo:enums = .hoge //Error
}

原因と対処方法

原因

privateなenum型を利用して定義した変数がpublicで定義されており、公開範囲がちぐはぐなため
このクラスのfoo変数を外部から参照した時、enums型で編集評価したいが、外部からenums型が見えないために、正しく操作できないことを考えると当然のエラー

対処方法

変数とenum型の公開範囲を合わせる
この場合、enumをあえてprivateで定義して非公開にしていることを考えると、単純にenum型を公開するのは望ましくない可能性が高い
enum型を公開にする場合は一度よく考えてから行う必要がある

対処済みコード例1

クラス内でしか利用しないはずのprivateなenum型で宣言した変数は、外部公開する必要がないはずなので、変数の公開範囲もprivateのみに変更する

class test
{
    private enum enums
    {
        case hoge,huga,piyo
    }
    private var foo:enums = .hoge //Edit
}

対処済みコード例2

変数fooを外部に公開する必要がある場合は、Enumの公開範囲を変数に合わせる

class test
{
    enum enums //Edit
    {
        case hoge,huga,piyo
    }
    var foo:enums = .hoge
}
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away