Ios 有没有办法在Swift中弃用或隐藏系统框架API?

Ios 有没有办法在Swift中弃用或隐藏系统框架API?,ios,swift,Ios,Swift,在某些情况下,我使用的是SpriteKit。我为SKTexture创建了一个扩展: public extension SKTexture { var sizeInPoint: CGSize { return CGSize(size().width/2, size().height/2) } } 现在我想防止意外使用size(),因为texture.size()是像素,这在我的游戏中从来都不是我想要的 我如何反对系统API?或者甚至有可能吗 注: 我知道当我对SKTexture进

在某些情况下,我使用的是SpriteKit。我为
SKTexture
创建了一个扩展:

public extension SKTexture {
  var sizeInPoint: CGSize {
    return CGSize(size().width/2, size().height/2)
  }
}
现在我想防止意外使用
size()
,因为
texture.size()
是像素,这在我的游戏中从来都不是我想要的

我如何反对系统API?或者甚至有可能吗

注:

我知道当我对SKTexture进行子类化时,我可以在我的子类中将
size()
标记为已弃用。但是,这并不理想,因为超类SKTexture仍然具有
size()
API

例如,我们仍然可以从SKTextureAtlas获取SKTexture:

let size = textureAtlas.textureNamed("dummy.png").size() // avoid this! 

我想不推荐系统API是不可能的

您可以覆盖默认行为:

public extension SKTexture {
  var sizeInPoint: CGSize {
    return CGSize(size().width/2, size().height/2)
  }

  override func size() -> CGSize {
    return sizeInPoint
  }
}

我认为反对任何API的唯一方法是使用所选方法的
@available(*,deprecated)
声明重新编译头文件

对于系统调用,由于明显的原因,我认为没有办法做到这一点。 在您的情况下,我建议您使用像SwiftLint这样的工具,并添加一条规则来避免调用,特别是因为SwiftLint允许您将这些调用标记为编译错误,而不是警告

UPD:

如果您不能使用第三方libs,那么有一个解决方案。 添加运行脚本阶段,并查找应发出“警告”或“错误”消息的关键字:

KEYWORDS=“size\(\)\?\?\?:\!\!:”
查找“${SRCROOT}”\(-name“*.swift”\)-print0 | xargs-0 egrep--带有文件名--行号--仅匹配“($KEYWORDS)。*\$”| perl-p-e“s/($KEYWORDS)/警告:不推荐使用大小()

您是否愿意接受基于SwiftLint的答案?有没有苹果的方法?(没有第三方LIB)?您只需向项目中添加一个运行脚本阶段,并查找一些关键字,然后发出“警告:”或“错误:”消息,请阅读此消息以了解更多信息-
keywords=“size\(\)\124;\?\?\?\?::!\!:“find”${SRCROOT}\(-name“*.swift”\)-print0 | xargs-0 egrp--带有文件名--行号--仅匹配“($keywords)。*\$”| perl-p-e“s/($KEYWORDS)/警告:不推荐使用size()。/“
-以下是我能够快速编写的内容,并获得使用size()的警告