当前位置:  开发笔记 > IOS > 正文

添加Swift枚举大小写是否需要对主要semver版本进行更新?

如何解决《添加Swift枚举大小写是否需要对主要semver版本进行更新?》经验,为你挑选了1个好方法。

与许多语言不同,Swift语言switch必须详尽无遗,所以如果我有:

enum Enumeration
{
    case A
    case B
}

然后此代码无效:

switch enumeration
{
case .A:
    break
}

但是,这些是有效的:

switch enumeration
{
case .A:
    break
case .B:
    break
}

switch enumeration
{
case .A:
    break
default:
    break
}

如果稍后添加case CEnumeration,则第一个有效代码现在将产生编译器错误。第二个有效,因为它使用default:,它将捕获.C

如果我符合semver的支持carthage(或Swift Package Manager)支持,我是否必须为此增加主版本?

对此的扩展适用于Objective-C(并隐含C)。由于Swift像Swift枚举一样支持C枚举,因此这也适用于打算在Swift中使用的Objective-C或C框架。我不确定如何解决这个问题,因为这些语言没有这种限制(如果您的编译器很好,则只是警告)。



1> Kostiantyn K..:

答:在Swift中向公共枚举添加新案例将打破变更。

推理

语义版本控制与某些语言功能无关,它与您的API稳定性有关。
语义版本主要包括3个部分(1.0.1):

重大 -如果公共API引入了任何向后不兼容的更改,则必须增加

次要 -如果公共API引入了新的向后兼容功能,则必须递增

路径 -如果仅引入向后兼容的错误修复,则必须增加

例:

假设您有一个包含以下枚举声明的框架:

//Framework
public enum Enumeration {
    case A
    case B
}

这是使用该框架的应用

//App 
let en = Enumeration.A
switch en {
    case .A: print("A")
    case .B: print("B")
}


现在添加更改,让我们对框架进行一些更改,然后看看是否已发生。让我们为枚举添加一个新的案例。

//Framework
public enum Enumeration {
    case A
    case B
    case C
}

Enumeration是一个公共的API,这是对外界可见。这意味着我们已经更改了API。它必须是主要更新或次要更新,补丁是在不更改API的情况下进行的。

如果您尝试编译和应用,它将失败,因为switch在Swift中必须详尽无遗。

因此,我们对API进行了重大更改,并且必须增加主要版本。1.0.1-> 2.0.0

重要的提示!

此问题将在Swift 3中处理。
这是Apple团队对此问题的回应。

这将作为弹性模型的一部分进行处理。公共枚举将无法在其模块之外进行完全匹配。

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有