You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift报错:子项目School结构体初始化器因internal保护级别无法访问

解决Swift跨模块初始化器访问权限问题

这个报错的根源其实是Swift的访问级别规则在搞鬼——你在子项目里把School结构体声明为public,但自定义的初始化器如果没显式标注访问级别,默认会是internal(仅模块内部可见)。而主项目作为独立模块,没法访问子项目里的internal成员,所以才会报“初始化器因‘internal’保护级别无法访问”的错。

解决方法很简单:给初始化器显式加上public修饰符

修改子项目里的School结构体代码如下:

public protocol MyProtocol { 
    func print() 
}

public struct School { 
    var name: String 
    var delegator: MyProtocol 
    // 给初始化器加上public修饰符,开放跨模块访问权限
    public init(name: String, delegate: MyProtocol) { 
        self.name = name 
        self.delegator = delegate 
    } 
}

补充说明

Swift的访问级别规则有个容易忽略的细节:public类型的自定义成员(包括初始化器)默认访问级别是internal,只有显式声明public,才能让跨模块的代码(比如你的主项目)访问到。你之前的代码里,初始化器没有加public,所以主项目无法调用它。

修改之后,主项目里给UIViewController扩展遵循MyProtocol后,就能正常初始化School实例了。

内容的提问来源于stack exchange,提问作者Leem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:40:15