我正在开发一个项目,该项目需要使用特定的日历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
}
}
但是我真的很想知道是否可能有“警告”的事情……
答案 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!")
在某个地方,每个人都可以在错误列表中看到它。