2017-02-01 5 views
2

私は自分のコードを読みやすくOたいので、私はいくつかの繰り返し辞書のキー、ソフトコード化を行うことを決めた...だから、私はそれに2つの構造体と、新しい.swiftファイルを作成:Swift - 私的なネストされた構造体を宣言するには?

struct DatabaseTableNames { 
    let Photo = PhotoTable() 
} 

private struct PhotoTable { 
    let lowQuality = "lowQuality" 
    let highQuality = "highQuality" 
    let numberOfLikes = "numberOfLikes" 
} 

は、だから私は持っています私は最初の構造体を使用し、2番目の構造体はファイルのスコープの外側に表示したくありません。つまり、DatabaseTableNames構造体のPhotoプロパティを宣言する必要がありますとしてfileprivatePhotoTableprivate ...

私はここで間違っていますか?

+0

DatabaseTableNames.Photoを非公開にすることはできますか? –

+0

@MobileDanそれから、「フォト」のプロパティはプライベートプロテクションレベル「 –

答えて

3

キーは、PhotoTableをネストしてそのプロパティを静的にすることでした。

struct DatabaseTableNames { 
    struct PhotoTable { 
     static let lowQuality = "lowQuality" 
     static let highQuality = "highQuality" 
     static let numberOfLikes = "numberOfLikes" 
    } 
} 

使用例:あなたのprivate設定周り

let test = DatabaseTableNames.PhotoTable.lowQuality 
print(test) 
+0

」のためにアクセスできないと言われています。それから、「フォト」プロパティはファイルプライバシ保護レベルのためにアクセス不能となります。 –

+0

それは機能しました! 「静的」なキーワードは何をしますか? –

+0

'static'はインスタンスプロパティではないことを意味します。 PhotoTableのインスタンスを作成した場合、静的プロパティへの参照は含まれません。これは、DatabaseTableNames.PhotoTable.lowQualityを介してのみアクセスできます。 –

1

スワップ - とのUIViewControllerは、あなたが

private struct DatabaseTableNames { 
    let Photo = PhotoTable() 
} 

struct PhotoTable { 
    let lowQuality = "lowQuality" 
    let highQuality = "highQuality" 
    let numberOfLikes = "numberOfLikes" 
} 

、それを使用するのと同じファイルでこれが定義されていることを確認した後、 、構造体にアクセスする

private var photo : DatabaseTableNames? 
+0

しかし、私は "DatabaseTableNames"に他のすべてのクラスからアクセスする必要があります。 –

+0

構造体内の唯一の変数が隠れている場合、他のファイルとは何を共有していますか? – Russell

+0

それは事です!たとえば、他のすべてのファイルから「DatabaseTableNames.Photo.lowQuality」を使用することができますが、「PhotoTable」構造体に直接アクセスできないようにするには... –

関連する問題