gpt4 book ai didi

swift - 声明框架中结构的简单协议(protocol)一致性

转载 作者:可可西里 更新时间:2023-10-31 23:44:30 26 4
gpt4 key购买 nike

是否可以声明在框架中定义的结构简单地符合在我的应用程序中定义的协议(protocol)?

举例来说,我有一个 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)来概括这些。

protocol Widget {
var temperature: Float { get }
}

在我的应用程序中,我可以声明类似于 API 中的结构,并简单地将它们声明为符合协议(protocol)。

struct MockWidget {
let temperature: Float
}

extension MockWidget: Widget {}

然后我可以为框架中的结构声明协议(protocol)一致性。

extension SuperSpecificWidget: Widget {
var temperature: Float {
get {
return surfaceTemperature
}
}
}

extension SpecificWidget: Widget {
var temperature: Float {
get {
return calibratedTemperature
}
}
}

extension VagueWidget: Widget {}

此代码编译,但不链接。框架中的普通符合 VagueWidget 等同于应用程序中的 MockWidget 导致缺少符号:

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 的琐碎协议(protocol)一致性会生成可以编译和运行的代码,但显然缺少所需的协议(protocol)一致性。我添加了一个 example project在 github 上。

更新:这似乎是一个已知问题。我已经提交了一个雷达,它作为 20648441 的副本被关闭了.

最佳答案

extension WidgetAPI.VagueWidget: Widget {
var temperature: Float {
return self.temperature
}
}

修复它。似乎与协议(protocol)中存储的不可变属性与计算的只读属性存在某种冲突。

更新:没关系,我刚刚发现无限递归。好像还有什么东西在那里

关于swift - 声明框架中结构的简单协议(protocol)一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32981542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com