我的ios应用程序当前存在一个大问题。
我们的项目结构如下:
在Common框架内,我们添加了一个新协议来包装所有SDK功能,看起来就像这样:
protocol SDKRepositoryProtocol {
var oneClassFromSDK : SDKClass123 { get set }
[...]
var otherTestProp: SDKCustomDate { get set }
}
因此SDKClass123
和SDKCustomDate
是SDK中的私有类。
在我们的“通用”框架中使用SDKRepository类可以正常工作,并且大多数目标都已成功构建,没有任何错误。
现在,问题出在这里:
如果我们现在想在一个目标中使用SDKRepositoryProtocol
,则IDE支持我们的用法,并且IntelliSense会显示所有协议变量,但是如果我们要编译 Swift >文件,我们会收到如下错误:
Value of type 'SDKRepositoryProtocol' has no member 'oneClassFromSDK'
。
注意:
如果我们尝试访问repoProtocol.otherTestProp
在两个构建配置中均有效,则更为神秘。
因此,接下来,我们尝试在TargetAppDelegate中将相同的协议用于相同的目标(仍然使用Obj-C编写)。
使用属性repoProtocol.oneClassFromSDK
那么,如果我们仅为TargetAppDelegate创建一个新扩展(使用Swift),还会有其他问题吗?我们需要定义某物吗?更多?
所以,对我来说,似乎是:
a)用于发行版本的编译器引起问题并删除了他认为未使用的属性(“ oneClassFromSDK”)
b)整个SDK不会导入到目标中,因为oneClassFromSDK
不能在Swift中使用,但是otherTestProp
编译不会出现问题
c)希望您有一些好主意
摘要:
我们尝试过的事情:
编辑:
因此,我们可以将问题最小化为一个文件:
class MyCustomServiceInTarget: NSObject {
let shello: SDKClass123
let repo: SDKRepositoryProtocol
init(repoProtocol: SDKRepositoryProtocol) {
self.repo = repoProtocol
var x = repoProtocol.oneClassFromSDK // Will produce an error
}
因此,在此服务内,我们收到类似上面的错误。该服务是在Targets AppDelegate内部使用的,因此它最初也显示在此处。
现在,想象一下:
如果我们在行let shello: SDKClass123
上注释掉并尝试再次使用repo.shell
属性,它就可以正常工作! :O:O
有人可以解释吗?