如果使用了var,Xcode显示警告

时间:2019-05-23 06:36:47

标签: swift xcode

我正在开发一个项目,该项目需要使用特定的日历Calendar.german,无论用户偏好是什么。

我想防止将来从事该项目的开发人员使用Calendar.current。 有没有一种方法可以替代Calendar.current来显示警告,以将其指向正确的警告(例如,就像Apple对弃用消息所做的那样)?

另一种方法是重写current以返回german

extension Calendar {
    static var german: Calendar {
        var calendar = Calendar(identifier: .gregorian)
        calendar.locale = Locale(identifier: "de")
        calendar.firstWeekday = 2
        return calendar
    }

    static var current: Calendar {
        return german
    }
}

但是我真的很想知道是否可能有“警告”的事情……

2 个答案:

答案 0 :(得分:6)

您可以将方法标记为已弃用,并添加一些注释。

@available(*, deprecated, message: "use german")
static var current: Calendar {
    return german
}

这显示警告'current' is deprecated: use german

答案 1 :(得分:3)

执行此操作的一种方法是像在此那样在current扩展名中创建自己的Calendar属性,并将其标记为已弃用

extension Calendar {
    static var german: Calendar {
        var calendar = Calendar(identifier: .gregorian)
        calendar.locale = Locale(identifier: "de")
        calendar.firstWeekday = 2
        return calendar
    }

    @available(*, deprecated)
    static var current: Calendar {
        fatalError() // this implementation can be arbitrary
    }
}

请注意,这实际上是在使用this bug,因此将来可能会停止工作。

另一种方法是使用#warning("message")语法发出警告。但这只会在您编写警告的那一行发出警告,但是它仍然可以用作告诉未来的开发人员不要使用Calendar.current的一种方式。只需输入

#warning("Don't use Calendar.current!")

在某个地方,每个人都可以在错误列表中看到它。