首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为框架中的struct声明简单的协议一致性

为框架中的struct声明简单的协议一致性
EN

Stack Overflow用户
提问于 2015-10-06 23:46:06
回答 2查看 1.1K关注 0票数 3

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

例如,我有一个API,它为一些在框架中建模的小部件声明了结构:

代码语言:javascript
复制
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?
}

然后在我的应用程序中,我想通过一个协议来概括这些内容。

代码语言:javascript
复制
protocol Widget {
    var temperature: Float { get }
}

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

代码语言:javascript
复制
struct MockWidget {
    let temperature: Float
}

extension MockWidget: Widget {}

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

代码语言:javascript
复制
extension SuperSpecificWidget: Widget {
    var temperature: Float {
        get {
            return surfaceTemperature
        }
    }
}

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

extension VagueWidget: Widget {}

此代码编译,但不链接。框架中与应用程序中的VagueWidget等价的小小的一致性MockWidget导致缺少一个符号:

代码语言:javascript
复制
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上添加了一个示例项目

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

EN

回答 2

Stack Overflow用户

发布于 2015-10-07 00:43:33

代码语言:javascript
复制
extension WidgetAPI.VagueWidget: Widget {
    var temperature: Float {
        return self.temperature
    }
}

修好它。似乎与协议中存储的不可变属性与计算的只读属性之间存在某种冲突。

更新:我刚刚发现了无限递归。我还是觉得有点像,

票数 0
EN

Stack Overflow用户

发布于 2015-10-07 06:45:32

你发现的有趣的虫子。你和斯科特·H做了所有的工作,但想加入一些解决办法:

  1. 将模型从struct更改为class。不知道为什么会这样。
  2. 函数也可以工作(即func temperature() -> Float)。

两者都不太理想。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32981542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档