获取初始化程序不可访问,因为其保护级别为“内部”。

3

我知道这可能不是问这个特定问题的正确场所,但我已经尝试联系下面GitHub存储库的作者,到目前为止还没有得到回应。

因此,我在GitHub上找到了这个特别有用的库,它基本上允许在tvOS上创建一个或多个“选择器”。它带有一个方便的预制日期选择器,使用MultiPickerConfiguration类来处理UI配置等属性。

然而,在通过Cocoapods引入库后,我似乎无法实例化自己的MultiPickerConfiguration对象。我尝试通过extension创建新的初始化程序,但Xcode会报以下错误信息:

initializer is inaccessible due to 'internal' protection level

我有点困惑,希望不必将整个.xcproj文件引入到我的.xcworkspace中。

有没有人有什么建议?谢谢!

2个回答

5
该结构体需要一个公共的初始化方法。要么作者需要添加一个,要么您可以添加一个并将其提交为pull请求。

如果结构体的任何存储属性是私有的,则结构体类型的默认成员逐一初始化器被认为是私有的。 同样,如果结构体的任何存储属性是文件私有的,则初始化器是文件私有的。 否则,初始化器具有内部访问级别。

与上面的默认初始化器一样,如果您想要在另一个模块中使用时使公共结构体类型可以使用成员逐一初始化器进行初始化,则必须作为该类型定义的一部分提供一个公共的成员逐一初始值设定项。

https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html#ID21


这基本上是我想到的。然而,考虑到作者已经失踪了相当长的时间,有没有办法通过扩展或其他不涉及触碰库基础代码的方式来添加init呢? - Earthling
1
不行。由于所有属性都是内部的,您无法访问它们以创建init方法。您可以fork该repo并自行进行更改。 - Craig Siemens
这是我一直担心的答案,但可能是唯一存在的答案。 :) 谢谢你的帮助! - Earthling

1

有人似乎遇到了同样的问题,并发布了这个问题

考虑到最后一次提交是在2018年2月,我怀疑任何人都不会很快修复它。您可以提交一个拉取请求并等待某人合并它。

同时,您可以通过编辑代码添加公共初始化器。在左侧面板中找到pod的代码:Pods > Pods > TVMultiPicker > MultiPickerConfiguration.swift。开始输入,一个对话框将出现并询问您是否要解锁文件。点击“解锁”并编写您的初始化器。


啊,其实那个问题是我发的,哈哈。是的,我知道我可以修改下载的 pod 的基础代码,但通常来说,我尽量不这样做。不过还是谢谢你的提示! :) - Earthling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接