1
我剛剛更新到Xcode 6.3測試版。它支持Swift 1.2,所以它使我的項目出現很多錯誤。儘管我已經使用了「Convert To Swift 1.2」功能,但它無法清除所有錯誤。如這個錯誤:Xcode 6.3&Swift錯誤:由隱式初始化程序'init()'在這裏定義的Objective-C方法'init'
import SpriteKit
class Score: Shape {
convenience init() {
self.init(name:"Score",imageName:"score")
self.physicsBody!.categoryBitMask = scoreCategory
light.lightColor = SKColor.greenColor()
light.categoryBitMask = scoreLightCategory
}
}
Xcode中示出了有在第3行的錯誤:初始化器爲 'init()' 將覆蓋從超類的SKSpriteNode' '初始化' Objective-C的方法; Objective-C的方法是 'init' 通過 '的init()' 在這裏
隱含的初始化定義,但如果我添加的參數是這樣的:
import SpriteKit
class Score: Shape {
convenience init(args:Bool) {
self.init(name:"Score",imageName:"score")
self.physicsBody!.categoryBitMask = scoreCategory
light.lightColor = SKColor.greenColor()
light.categoryBitMask = scoreLightCategory
}
}
但什麼是「Objective-C的方法 'init' 的隱式定義初始化'init()'在這裏「是什麼意思?我如何優雅地解決這個問題?
PS:本Shape
類從SKSpriteNode
類繼承:
class Shape: SKSpriteNode {
required init(coder: NSCoder) {
fatalError("NSCoding not supported")
}
init(name:String,imageName:String){
super.init(texture: SKTexture(imageNamed: imageName),color:SKColor.clearColor(), size: CGSizeMake(radius*2, radius*2))
self.name = name
}
}
我刪除了我的答案。我希望別人能幫助你。 – fred02138 2015-02-11 15:52:52
與Objective-C中的子類不同,Swift子類默認不會繼承它們的父類初始化程序。所以'init()'是Objc中'SKSpriteNode'的指定初始值設定項,但不是Swift中的。我認爲這個問題打破了Objc和Swift之間的橋樑。 – YangXiaoyu 2015-02-11 16:09:47