【问题标题】:Legacy Constructor Violation: Swift constructors are preferred over legacy convenience functions. (legacy_constructor)Legacy Constructor Violation:Swift 构造函数优于传统的便利函数。 (legacy_constructor)
【发布时间】:2017-02-01 11:44:11
【问题描述】:

我在此行收到SwiftLint 警告:

return UIEdgeInsetsMake(topInset, leftInset, bottomInset, rightInset)

这是警告:

遗留构造器违规:Swift 构造器优先于 遗留的便利功能。 (legacy_constructor)

我也在这一行收到警告:

return CGRectInset(bounds, insetX, insetY)

传统 CGGeometry 函数违规:结构扩展属性和 方法优于遗留功能 (legacy_cggeometry_functions)

UIEdgeInsetsMakeCGRectInset 的 Swift 版本是什么?

【问题讨论】:

  • 你看过参考developer.apple.com/reference/uikit/uiedgeinsets吗?或尝试自动完成:return UIEdgeInsets(
  • 我做了,但 Swift 版本具有相同的名称。所以我不知道如何解决这个警告,或者是否有不同的方法。
  • 类型为UIEdgeInsets,所以以UIEdgeInsets(开头,不是 UIEdgeInsetsMake...
  • 谢谢! CGRectInset 呢?
  • 再次,查找 CGRectInset 文档页面,然后切换到 Swift,您会发现 developer.apple.com/reference/coregraphics/cgrect/…:func insetBy(dx: CGFloat, dy: CGFloat) -> CGRect

标签: swift xcode swiftlint


【解决方案1】:

Swift 希望您更新这些类型的新结构初始化器,而不是旧的 C 构造器。因此,您的 inset 初始化程序将更改为:

return UIEdgeInsets(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)

CGRectInset C 方法已更改为 CGRect 结构上的方法。

return bounds.insetBy(dx: insetX, dy: insetY)

【讨论】:

  • 我最终使用 UIEdgeInsets 而不是 UIEdgeInsetsMake 正如@Martin R 建议的那样。
  • 这就是我要写的。 UIEdgeInsetsMake 是我的一种类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 2017-07-06
  • 2020-01-14
  • 2021-05-07
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多