#swift #skspritenode
Вопрос:
Я просматриваю приведенный ниже код из цикла for. Если определенные обстоятельства верны, я бы хотел «не» создавать SKSpriteNode. Есть ли конкретное значение возврата, т. Е. -1, которое я могу вызвать, что приведет к тому, что SKSpriteNode не будет создан без сбоя приложения?
Или это то, что мне нужно выяснить, прежде чем создавать его?
class GuessSlot : SKSpriteNode{
var nodeIndex : Int
var holdingGem : Bool = false
init(color: SKColor, size: CGSize, width: CGFloat, iFactor: Int, guessBarRef: GuessBar){
let skTexture = SKTexture(imageNamed: "gem_slot")
self.nodeIndex = iFactor
super.init(texture: skTexture, color: color, size: size)
self.name = "slot"
self.size.width = size.width
self.size.height = size.width
self.anchorPoint = CGPoint(x: 0.5, y: 0.5)
var indexSpacing = (size.width * CGFloat(iFactor))
((size.height * 2) * CGFloat(iFactor)) (size.width/2)
indexSpacing = 10
self.position = CGPoint(x: indexSpacing, y: guessBarRef.size.height/2)
self.isHidden = false
guessBarRef.addChild(self)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Ответ №1:
Похоже, вам может понадобиться отказоустойчивый инициализатор. Это вернулось nil
бы (что-то вроде «ничего» -1
).
init?(color: SKColor, size: CGSize, width: CGFloat, iFactor: Int, guessBarRef: GuessBar) {
if /* your condition here */ {
return nil
}
}
Затем вы бы использовали его вот так:
if let slot = GuessSlot(color: ..., size: ..., width: ..., iFactor: ..., guessBarRef: ...) {
/// `SKSpriteNode` has been created
} else {
/// won't crash app and `SKSpriteNode` is not created
}