无法将属性声明为公共属性,因为其类型使用内部类型


100

我创建了两个类ContentBucketBucket包含Content对象数组,并通过公共属性公开该对象。但是,当我这样做时,会收到错误消息:

无法将属性声明为公共属性,因为其类型使用内部类型

在此处输入图片说明

关于为什么会引发错误的任何想法?


很高兴看到一种只向公众公开基础课的方法,例如public(Array<NSObject>) let contents: Array<Content>
Ben Leggiero

Answers:


174

您还必须声明Content公共类的访问级别。

public class Content {
   // some code
}

文档中所述:

不能将公共变量定义为具有内部或私有类型,因为在使用公共变量的所有地方该类型可能都不可用。

internal默认情况下,类被声明为类,因此您必须添加public关键字以使其公开。

对于功能也存在类似的规则。

函数不能具有比其参数类型和返回类型更高的访问级别,因为该函数可以在周围的代码无法使用其组成类型的情况下使用。


3
好答案。我还发现,直到重新启动Xcode(9.2),错误才会消失。
Jasongiss '18

9

Content 也必须声明为公开:

public class Content {}

根据您的用例,您也可以声明Bucket为内部。public在这种情况下,只需省略关键字。


1

我的问题是名称空间问题。

我已经声明了一个名为的枚举,Data并且该枚举与Swift Data类无关,尤其imageData: Data是Core Data模型中的一个属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.