我在构建报告上花了很多时间才弄清楚为什么用Swift3编译Xcode 8.2.1需要很长时间。
我发现的一个问题是一个简单的覆盖初始化函数,简单的内容大约需要45秒来进行类型检查/编译。
我无法弄清楚原因是什么。我试图分成函数,在需要的地方提供类型,但编译仍然需要很长时间。
Superclass MyScene从SKScene开始只是在场景中调用了removeAllActions。
下面是代码:
class LevelSelectionScene: MyScene {
var gameMode:GameMode
var levelSelectionLayer:SKNode!
var screenSize:CGSize!
var startingPoint:CGPoint!
var backButton: Button!
fileprivate var _buttonBg : SKSpriteNode!
fileprivate var _layerTouched : Bool = false
fileprivate var _touchPress : Bool = false
override init(size: CGSize) {
self.screenSize = UIScreen.main.bounds.size
self.gameMode = GameMode.Classic
let tileGap:CGFloat = Constants.Config.LevelSelection.tilegap
let tileWidth:CGFloat = Constants.Config.LevelSelection.tilewidth
let numX:CGFloat = screenSize.width / (tileWidth+tileGap)
self.levelSelectionLayer = SKNode()
self.levelSelectionLayer.zPosition = 100
self.startingPoint = CGPoint(x: (-numX*(tileWidth+tileGap))/2+tileWidth/2+tileGap, y: 0)
super.init(size: size)
}
...
答案 0 :(得分:3)
self.startingPoint
的数学运算。它必须与那些2
做一些工作。
这是一个很好的例子,你可以投入一个空白的项目。
class LevelSelectionScene {
init(size: CGSize) {
let screenSize = CGSize(width: 320, height: 480)
let tileGap: CGFloat = 10
let tileWidth: CGFloat = 10
let numX: CGFloat = screenSize.width / (tileWidth + tileGap)
// let slowPoint = CGPoint(x: (-numX*(tileWidth+tileGap))/2+tileWidth/2+tileGap, y: 0)
let fastPoint = CGPoint(x: (-numX * (tileWidth + tileGap)) / CGFloat(2) + tileWidth / CGFloat(2) + tileGap, y: 0)
}
}
尝试编译并注意它的速度。然后移除//
的{{1}}并注意它有多慢。每当你在swift中进行数学运算时,尽可能明确地表达类型。
TL; DR将这些slowPoint
转换为2
的{{1}}。