Ios 有没有办法在Swift中弃用或隐藏系统框架API?
在某些情况下,我使用的是SpriteKit。我为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进
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()的警告