从子 SKSpriteNode 读取值

Reading value from child SKSpriteNode

基本卡片对象:

import Foundation
import SpriteKit

class Card: SKSpriteNode {
    var cardValue:Int = 0

    init() {
        cardValue = 10
    }
    ...
}

为什么当它是 SKNode 的子节点时我无法读取它?使用 lldb 调试时,它向我显示了整个对象内的值,但我无法访问它:

(lldb) p handsOnScreen.children[0]
(BlackJack.Card) $R0 = 0x00007f84937a21a0 {
  SpriteKit.SKSpriteNode = {
    SKNode = {
      UIResponder = {
        NSObject = {
          isa = Blackjack.Card
        }
        _hasAlternateNextResponder = false
        _hasInputAssistantItem = false
      }
      _parent = 0x00007f8493708b60
      _children = nil
      _actions = nil
      _keyedActions = nil
      _keyedSubSprites = nil
      _info = nil
      _attributeValues = nil
      _name = nil
      _userData = nil
      _constraints = nil
      _version = 17096000
      _userInteractionEnabled = false
      _reachConstraints = nil
    }
    _light = nil
    _shouldRepeatTexture = false
  }
  cardValue = 10
  ...

看到输出后,我想我可以试试这个:

(lldb) p handsOnScreen.children[0].cardValue
error: <EXPR>:1:35: error: value of type 'SKNode' has no member 'cardValue'

我做错了什么?

您必须将 SKNode 转换为 Card 才能访问其属性。

if let card = handsOnScreen.children[0] as? Card {
  print(card.cardValue)
}

为了安全起见,我使用了 if let 语句而不是强制展开 (as!),以防万一 children[0] 处的对象恰好不是 Card