Amplify Swift:AWSPredictionsPlugin初始化因internal保护级别无法访问
AWSPredictionsPlugin初始化器不可访问问题解决办法
问题根源
AWSPredictionsPlugin的默认初始化器被设为internal访问级别,无法直接在你的代码中调用,这是Amplify iOS SDK的设计要求,必须通过指定配置的方式创建插件实例。
修复方案
替换初始化代码
把直接创建AWSPredictionsPlugin()的代码,改成使用带配置参数的初始化方式,并且将这行代码移入do-catch块内(因为初始化会抛出错误):
修改前:
let predictions = AWSPredictionsPlugin()
修改后:
let predictions = try AWSPredictionsPlugin(configuration: .default)
完整的configureAmplify方法示例
func configureAmplify() { let apiPlugin = AWSAPIPlugin(modelRegistration: AmplifyModels()) let dataStorePlugin = AWSDataStorePlugin(modelRegistration: AmplifyModels()) let s3 = AWSS3StoragePlugin() let cognitoAuth = AWSCognitoAuthPlugin() do { // 使用默认配置创建Predictions插件 let predictions = try AWSPredictionsPlugin(configuration: .default) try Amplify.add(plugin: apiPlugin) try Amplify.add(plugin: dataStorePlugin) try Amplify.add(plugin: s3) try Amplify.add(plugin: cognitoAuth) try Amplify.add(plugin: predictions) try Amplify.configure() print("Initialized Amplify") } catch { print("Could not initialize Amplify: \(error)") } }
可选:自定义插件配置
如果需要对预测服务(比如识别、翻译、理解功能)做自定义设置,可以手动创建配置对象:
let predictionsConfig = AWSPredictionsPluginConfiguration( convert: ConvertConfiguration(defaultLanguage: .english), identify: IdentifyConfiguration(), interpret: InterpretConfiguration() ) let predictions = try AWSPredictionsPlugin(configuration: predictionsConfig)
为什么你的尝试没效果
- 修改
FrenchAppApp的init访问级别:问题出在AWSPredictionsPlugin内部的初始化器权限,和你自己的App结构体初始化器无关。 - 继承
AWSPredictionsPlugin重写init:父类的初始化器是internal,子类无法调用或重写这个初始化器,因此这种方式无法绕过权限限制。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

