Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Property cannot be declared public because its type uses an internal type

Tags:

swift

I created two classes Content and Bucket. Bucket contains an array of Content objects and exposes that via a public property. However, when I do so, I receive the error:

Property cannot be declared public because its type uses an internal type

enter image description here

Any thoughts on why this is raising an error?

like image 519
Steve Avatar asked Aug 03 '15 16:08

Steve


3 Answers

You have to declare the access level of the Content class public as well.

public class Content {
   // some code
}

As stated in the documentation:

A public variable cannot be defined as having an internal or private type, because the type might not be available everywhere that the public variable is used.

Classes are declared as internal by default, so you have to add the public keyword to make them public.

A similar rule exists for functions as well.

A function cannot have a higher access level than its parameter types and return type, because the function could be used in situations where its constituent types are not available to the surrounding code.

like image 149
Cihan Tek Avatar answered Nov 17 '22 02:11

Cihan Tek


Content must be declared as public too:

public class Content {
  …
}

Depending on your use-case you might declare Bucket as internal, too. Just omit the public keyword in this case.

like image 13
Koraktor Avatar answered Nov 17 '22 03:11

Koraktor


My issue was a namespace problem.

I had declared an enum called Data and that was mucking with the Swift Data class, especially an imageData: Data property within a Core Data model.

like image 4
pkamb Avatar answered Nov 17 '22 03:11

pkamb