是否可以声明该结构在框架中定义的结构可以简单地符合在我的应用程序中定义的协议?声明框架中结构的普通协议一致性
说,例如,我有一个声明为一个框架仿照了几个小工具结构的API:
public struct VagueWidget {
public let temperature: Float
}
public struct SpecificWidget {
public let calibratedTemperature: Float
public let movingAverageTemperature: Float
}
public struct SuperSpecificWidget {
public let surfaceTemperature: Float
public let inferredCoreTemperature: Int?
}
然后在我的应用我想通过协议的方式来概括这些。
protocol Widget {
var temperature: Float { get }
}
在我的应用程序可以声明类似的API中的结构,和平凡的声明为符合协议。
struct MockWidget {
let temperature: Float
}
extension MockWidget: Widget {}
然后我可以声明框架中结构的协议一致性。
extension SuperSpecificWidget: Widget {
var temperature: Float {
get {
return surfaceTemperature
}
}
}
extension SpecificWidget: Widget {
var temperature: Float {
get {
return calibratedTemperature
}
}
}
extension VagueWidget: Widget {}
此代码编译但未链接。中相应的框架,它是等效于在丢失符号中的应用效果的MockWidget
平凡符合VagueWidget
:
Undefined symbols for architecture x86_64:
"WidgetAPI.VagueWidget.temperature.getter : Swift.Float", referenced from:
protocol witness for WidgetApp.Widget.temperature.getter : Swift.Float in conformance WidgetAPI.VagueWidget : WidgetApp.Widget in WidgetApp in AppModel.o
注释掉琐碎协议一致性为VagueWidget
产生代码,编译和运行,但显然缺少所需协议一致性。我在github上添加了一个example project。
更新:这似乎是一个已知问题。我已经提交了一个雷达,它被作为20648441的副本关闭。
呵呵,你看起来是正确的。尽管我看起来像无限递归,但我可以发誓我试过了。谢谢! – blackp
@blackp看到更新,我错了。这只是无限递归。仍试图通过这一工作。我在另一个项目中复制了它。 –
啊好吧。看起来像无限递归。上面评论它的出现正确的地方是我运行API目标的单元测试,而不是应用程序。 :) – blackp