Swift: параметр Init не разрешен

Я пытаюсь сделать что-то, что кажется простым, но я получаю «использование неразрешенного идентификатора» вместо переменной, которую я ожидаю.

В одном классе я создаю объект:

let sprite = Hero(view: view)

View — допустимая переменная, и я могу po использовать ее в этом классе.

В Hero я настроил функцию инициализации следующим образом:

init(view: SKView) {
    ...
}

Но когда я пытаюсь просмотреть po из этого инициализатора, я получаю сообщение об ошибке «использование неразрешенного идентификатора». Есть идеи, почему?

ИЗМЕНИТЬ:

Вот весь мой соответствующий код:

GameScene.swift

import SpriteKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        let sprite = Hero(view: view)
        self.addChild(sprite)
    }
}

Hero.swift

import SpriteKit

class Hero: SKSpriteNode {
    init(view: SKView) {

        let texture = SKTexture(imageNamed:"Spaceship")
        let color = SKColor(white: 0, alpha: 0)
        let size = CGSizeMake(100, 100)

        super.init(texture:texture, color:color, size:size)

        self.xScale = 1.0
        self.yScale = 1.0
        self.position = CGPointMake((view.bounds.width / 2) - (size.width / 2), view.bounds.height - 200)

    }
}

Все в этом коде работает, космический корабль появится, если я установлю позицию, скажем, CGPointMake(200,200), только view не разрешено в Hero. Я передаю вид, чтобы герой знал границы представления, к которому он добавляется, и мог центрировать себя.


person RyJ    schedule 30.06.2014    source источник
comment
ты пробовал let sprite = Hero( view)?   -  person Connor    schedule 30.06.2014
comment
Можем ли мы увидеть еще кое-что из того, что находится в методе модуля? (до момента, когда вы входите в режим просмотра)   -  person fqdn    schedule 30.06.2014
comment
Почему вы используете отладчик (который в Swift практически не работает)? Код компилируется? Это работает? В чем проблема?   -  person matt    schedule 30.06.2014


Ответы (1)


Итак, я получил код, работающий так, как я ожидал. В итоге я изменил определение инициализации Hero, чтобы оно выглядело так:

init(addToView view: SKView)

А затем инициализировал новый объект, выполнив:

let hero = Hero(addToView: view)

Теперь все работает так, как я ожидаю, view передается в инициализацию как разрешенная переменная. Но что забавно, рекомендация @connor использовать let sprite = Hero(view) должна была сработать, когда init был определен как init(view: SKView). "view:" в этом случае было именем локального параметра и не должно было требоваться при вызове функции. По крайней мере, это то, во что я верю, основываясь на главе «Функции» книги «Язык программирования Swift». Я понятия не имею, почему Xcode жаловался на отсутствующее «представление:» в вызове функции, которое было бы именем внешнего параметра, никогда не перечисляемым в определении инициализации.

person RyJ    schedule 04.07.2014