尝试快速初始化超类属性但遇到错误
Posted
技术标签:
【中文标题】尝试快速初始化超类属性但遇到错误【英文标题】:Trying to initialize super class property in swift but run into errors 【发布时间】:2016-08-17 15:16:35 【问题描述】:我是 swift 新手,目前正在学习初始化程序。我遇到了覆盖父类初始化程序的问题。 我得到一个编译器错误“在超级初始化初始化自我之前,在属性访问‘ImageTexture’中使用‘自我’”
我希望在调用特殊徽章类时使用新图像
这是我得到错误的特殊徽章类
class SpecialBadge: Badge
enum BadgeAnimation: Int
case GrowAndShrink = 0, Rotate, Shake
override init(requestType: UDRequestType)
let animation = BadgeAnimation(rawValue: Int(arc4random_uniform(3)))
self.imageTexture = SKTexture(imageNamed: "BadgeTeal")
super.init(requestType: requestType)
switch animation!
case .GrowAndShrink:
growShrink()
case .Rotate:
rotate()
case .Shake:
shake()
我在网上打电话时遇到错误:
self.imageTexture = SKTexture(imageNamed: "BadgeTeal")
在致电super.init(requestType: requestType)
之前
我的父类;
class Badge: SKSpriteNode
var requestType: UDRequestType
var imageTexture: SKTexture?
init(requestType: UDRequestType)
self.requestType = requestType
if let texture = imageTexture
super.init(texture: texture, color: UIColor.clearColor(), size: CGSizeMake(48, 48))
else
let newTexture = SKTexture(imageNamed: "BadgeMagenta")
super.init(texture: newTexture, color: UIColor.clearColor(), size: CGSizeMake(48, 48))
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
我不知道如何初始化 imageTexture,以便它可以在调用 SpecialBadge 中的初始化程序之前使用不同的图像,非常感谢任何帮助
【问题讨论】:
if let
绑定总是会失败,因为imageTexture
没有默认值。这是故意的吗?
【参考方案1】:
这只是你做事的顺序问题。这是非法的:
self.imageTexture = SKTexture(imageNamed: "BadgeTeal")
super.init(requestType: requestType)
这是合法的:
super.init(requestType: requestType)
self.imageTexture = SKTexture(imageNamed: "BadgeTeal")
规则是您必须先完成超类的初始化,然后才能对自己的类进行任何特殊操作。
【讨论】:
嘿,我尝试过这种方法,但我的目标是使用 SKTexture(imageNamed: "BadgeTeal") 但 imageTexture 在调用初始化程序时为空,它使用 SKTexture(imageNamed: "BadgeMagenta")徽章类。有没有办法覆盖在 Badge 类初始化程序中使用的 super.init? 我没有看到问题所在。只需先调用super.init
dead,然后再执行其他所有操作。以上是关于尝试快速初始化超类属性但遇到错误的主要内容,如果未能解决你的问题,请参考以下文章
如果我使用Superclass初始化子类对象,为什么该对象具有子类的属性,但是超类的方法?
Swift - 必须调用超类 SKSpriteNode 错误的指定初始化程序